猿问

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

我正在使用 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


浮云间
浏览 84回答 2
2回答

弑天下

遍历数组时,将每个对象分配给键为月份的对象。这样,如果后一项与前一项具有相同的月份,则后一项将覆盖对象上的前一项。var input = [ { month: 'Jan', value: 3 },&nbsp; { month: 'Jan', value: 3.5 },&nbsp; { month: 'Feb', value: 2.1 },&nbsp; { month: 'Mar', value: 6 },&nbsp; { month: 'Apr', value: 4.3 },&nbsp; { month: 'May', value: 5.5 },&nbsp; { month: 'Jun', value: 7 },&nbsp; { month: 'Jun', value: 9 },&nbsp; { month: 'Jul', value: 7 },&nbsp; { month: 'Jul', value: 9 },&nbsp; { month: 'Jul', value: 7 },&nbsp; { month: 'Aug', value: 9 },&nbsp; { month: 'Sep', value: 9 },&nbsp; { month: 'Sep', value: 9 },&nbsp; { month: 'Oct', value: 8 },&nbsp; { month: 'Oct', value: 5 },&nbsp; { month: 'Oct', value: 3 },&nbsp; { month: 'Nov', value: 12 },&nbsp; { month: 'Nov', value: 19.5 }];const obj = {};for (const item of input) {&nbsp; obj[item.month] = item;}const output = Object.values(obj);console.log(output);

aluckdog

如果月份的顺序是连续的,您可以按如下方式使用 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) => {&nbsp; const eleIdx = a.findIndex(e => e.month === v.month);&nbsp; if (eleIdx > -1 && input[i - 1].month === v.month) {&nbsp; &nbsp; a[eleIdx].value = v.value;&nbsp; } else {&nbsp; &nbsp; a.push(v);&nbsp; }&nbsp; return a;}, result);console.log(result);
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答