为了账号安全,请及时绑定邮箱和手机立即绑定

如果 JavaScript 对象具有相同的键不同的值,则只获取重复键的最后一个键值

如果 JavaScript 对象具有相同的键不同的值,则只获取重复键的最后一个键值

浮云间 2022-05-22 11:32:40
我正在使用 java 脚本数组对象来存储从数据库中获取的数据。在这里,我使用相同的键存储了值。如果 Javascript 对象具有相同的键但具有不同的值,我需要获取重复项的最后一个键和值          var input = [ { month: 'Jan', value: 3 },              { month: 'Jan', value: 3.5 },              { month: 'Feb', value: 2.1 },              { month: 'Mar', value: 6 },              { month: 'Apr', value: 4.3 },              { month: 'May', value: 5.5 },              { month: 'Jun', value: 7 },              { month: 'Jun', value: 9 },              { month: 'Jul', value: 7 },              { month: 'Jul', value: 9 },              { month: 'Jul', value: 7 },              { month: 'Aug', value: 9 },              { month: 'Sep', value: 9 },              { month: 'Sep', value: 9 },              { month: 'Oct', value: 8 },              { month: 'Oct', value: 5 },              { month: 'Oct', value: 3 },              { month: 'Nov', value: 12 },              { month: 'Nov', value: 19.5 } ];            var result = [];            for (var i = 0; i < input.length; i++) {                var data = input[i];                var found=false;                for(var j=0; j<result.length; j++) {                    if(result[j].month === data.month) {                        found=true;                        result[j].value += data.value;                        break;                    }                }                if(!found) {                    result.push(data);                }            }            //The result array is your desired result            console.log(result);在上面的代码中,它将添加相同键的值并显示结果。但我需要获取重复键的最后一个键和值。例如:它有 month:jan ,value:3 和 month:jan , value:3.5 。我只需要获取最后一个键值。(即)月份:一月,价值:3.5
查看完整描述

2 回答

?
弑天下

TA贡献1818条经验 获得超8个赞

遍历数组时,将每个对象分配给键为月份的对象。这样,如果后一项与前一项具有相同的月份,则后一项将覆盖对象上的前一项。


var input = [ { month: 'Jan', value: 3 },

  { month: 'Jan', value: 3.5 },

  { month: 'Feb', value: 2.1 },

  { month: 'Mar', value: 6 },

  { month: 'Apr', value: 4.3 },

  { month: 'May', value: 5.5 },

  { month: 'Jun', value: 7 },

  { month: 'Jun', value: 9 },

  { month: 'Jul', value: 7 },

  { month: 'Jul', value: 9 },

  { month: 'Jul', value: 7 },

  { month: 'Aug', value: 9 },

  { month: 'Sep', value: 9 },

  { month: 'Sep', value: 9 },

  { month: 'Oct', value: 8 },

  { month: 'Oct', value: 5 },

  { month: 'Oct', value: 3 },

  { month: 'Nov', value: 12 },

  { month: 'Nov', value: 19.5 }

];

const obj = {};

for (const item of input) {

  obj[item.month] = item;

}

const output = Object.values(obj);

console.log(output);


查看完整回答
反对 回复 2022-05-22
?
aluckdog

TA贡献1847条经验 获得超7个赞

如果月份的顺序是连续的,您可以按如下方式使用 reduce:


const input = [{ month: 'Jan', value: 3 }, { month: 'Jan', value: 3.5 }, { month: 'Feb', value: 2.1 }, { month: 'Mar', value: 6 }, { month: 'Apr', value: 4.3 }, { month: 'May', value: 5.5 }, { month: 'Jun', value: 7 }, { month: 'Jun', value: 9 }, { month: 'Jul', value: 7 }, { month: 'Jul', value: 9 }, { month: 'Jul', value: 7 }, { month: 'Aug', value: 9 }, { month: 'Sep', value: 9 }, { month: 'Sep', value: 9 }, { month: 'Oct', value: 8 }, { month: 'Oct', value: 5 }, { month: 'Oct', value: 3 }, { month: 'Nov', value: 12 }, { month: 'Nov', value: 19.5 }];


const result = [];


input.reduce((a, v, i) => {

  const eleIdx = a.findIndex(e => e.month === v.month);

  if (eleIdx > -1 && input[i - 1].month === v.month) {

    a[eleIdx].value = v.value;

  } else {

    a.push(v);

  }

  return a;

}, result);



console.log(result);


查看完整回答
反对 回复 2022-05-22
  • 2 回答
  • 0 关注
  • 83 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信