![](/img/trans.png)
[英]Manipulating javascript array of objects to obtain a new set of array of objects
[英]Manipulating Javascript array of objects
我有一個對象數組,需要創建一個新數組,其中包含對象中特定鍵的值。 是否有比以下代碼更優雅的方式(注意:不使用任何東西比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(", "));
使用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(', '))
您可以過濾,使用delta,slice和map 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(", "));
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
前三名並且也知道等級是唯一的時,您可以使用此。 如果排名不是唯一的,您可以使用r.splice(rank-1, 0, sid)
代替r[rank-1] = sid
並在末尾slice
top 3。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.