操作 Javascript 对象数组



>我有一个对象数组,需要创建一个新数组,其中包含对象中特定键的值。有没有比以下代码更优雅的方法(注意:不使用 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(", "));

使用 ES6map,而不是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(', '))

您可以过滤、使用 delta、切片和映射sid作为结果数组进行排序。

var array = [{ sid: 387, rank: 2 }, { sid: 455, rank: 1 }, { sid: 364, rank: 4 }, { sid: 495, rank: 3 }],
top3 = array
.filter(({ rank }) => rank < 4)
.sort((a, b) => a.rank - b.rank)
.slice(0, 3)
.map(({ sid }) => sid);
console.log(top3.join(", "));

使用 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(", "));

function pluck(objs, name, condition) {
var sol = [];
for (var i in objs) {
if (objs[i].hasOwnProperty(name) && condition && condition(objs[i])) {
// console.log(objs[i][name]);
sol.push(objs[i][name]);
}
}
return sol;
}
var arr = [{sid: 387, rank: 2}, {sid: 455, rank: 1}, {sid: 364, rank: 4}, {sid: 495, rank: 3}];
var pluckedArray = pluck(arr, sid, function (item) {
return item.rand < 4; // your custom condition
})

只迭代数组一次,然后构建结果数组怎么样?

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] = sid,并在最后slice前 3 名。

最新更新