处理对象的Javascript数组

时间:2018-08-24 10:01:41

标签: javascript arrays object

我有一个对象数组,需要创建一个新数组,其中包含对象内特定键的值。是否有比以下代码更优雅的方式(请注意:除了使用JQuery外,不要使用其他任何东西)。预期结果是:455、387、495

var arr=[{sid:387,rank:2},{sid:455,rank:1},{sid:364,rank:4},{sid:495,rank:3}];
var topThreeTemp = arr.filter(function(a){return a.rank<4;}).sort(function(a,b){return a.rank>b.rank;});
var topThreeSIDs=[];
for(var i=0;i<topThreeTemp.length;i++){
    topThreeSIDs.push(topThreeTemp[i].sid);
}
console.log(topThreeSIDs.join(", "));

5 个答案:

答案 0 :(得分:4)

使用ES6 map代替for和ES6箭头功能(语法糖):

const arr = [
 { sid: 387,rank: 2 },
 { sid: 455,rank: 1 },
 { sid: 364,rank: 4 },
 { sid: 495,rank: 3 }
]

const topThreeSIDs = arr
  .filter(({ rank }) => rank < 4)
  .sort((a, b) => a.rank > b.rank)
  .map(({ sid }) => sid)
  

console.log(topThreeSIDs.join(', '))

答案 1 :(得分:2)

您可以过滤,使用增量,切片和将NODE_PATH = src/映射为结果数组。

sid

答案 2 :(得分:1)

使用Array.map

var arr=[{sid:387,rank:2},{sid:455,rank:1},{sid:364,rank:4},{sid:495,rank:3}];

var result = arr.filter(({rank}) => rank < 4).sort((a,b) => a.rank > b.rank).map(({sid}) => sid);
console.log(result.join(", "));

答案 3 :(得分:0)

{$set: [ "'key1' => $value1, 'key2' => $value2" ]}

答案 4 :(得分:0)

如何只对数组进行一次迭代并构建结果数组?

arr.reduce((r, {rank, sid})=>(rank < 4 && (r[rank -1] = sid), r), [])

var arr = [{ sid: 387, rank: 2 }, { sid: 455, rank: 1 }, { sid: 364, rank: 4 }, { sid: 495, rank: 3 }],
    top3 = arr.reduce((r, {rank, sid})=>(rank < 4 && (r[rank -1] = sid), r), []);
    
console.log(top3);

注意:当您需要排名最高的4中的前3名并且知道排名是唯一的时,可以使用此方法。如果等级不是唯一的,则可以使用r.splice(rank-1, 0, sid)代替末尾的r[rank-1] = sidslice前3名。