[英]Get the indexes of javascript array elements that satisfy condition
我有這樣一個數組:
[{prop1:"abc",prop2:"qwe"},{prop1:"abc",prop2:"yutu"},{prop1:"xyz",prop2:"qwrq"}]
我想獲得滿足條件的所有元素的索引; 在這種情況下,當prop1 == "abc"
。 所以期望的輸出類似於[0,1]
。
苦苦尋找一種干凈的方式來做到這一點? indexes = a.findIndex(x => x.prop1==="abc")
將為上面的數組返回0
,因為它在第一次成功查找時停止。
我覺得我想要這樣的東西: indexes = a.filtered(x.index() => x.prop1==="abc")
您可以使用Array#reduce
方法。
var data = [{prop1:"abc",prop2:"qwe"},{prop1:"abc",prop2:"yutu"},{prop1:"xyz",prop2:"qwrq"}]; console.log( data.reduce(function(arr, e, i) { if (e.prop1 == 'abc') arr.push(i); return arr; }, []) ) // with ES6 arrow syntax console.log( data.reduce((arr, e, i) => ((e.prop1 == 'abc') && arr.push(i), arr), []) )
簡單的for
循環
var data = [{prop1:"abc",prop2:"qwe"},{prop1:"abc",prop2:"yutu"},{prop1:"xyz",prop2:"qwrq"}]; var res = []; for (var i = 0; i < data.length; i++) { if (data[i].prop1 == 'abc') res.push(i); } console.log(res)
或者使用Array#filter
和Array#map
方法(不是一種有效的方法,因為它需要迭代兩次)。
var data = [{prop1:"abc",prop2:"qwe"},{prop1:"abc",prop2:"yutu"},{prop1:"xyz",prop2:"qwrq"}]; console.log( data.map(function(e, i) { return i; }).filter(function(e) { return data[e].prop1 == 'abc'; }) ) // With ES6 arrow syntax console.log( data.map((_, i) => i).filter(e => data[e].prop1 == 'abc') )
您可以使用reduce
功能。
var array = [{ prop1: "abc", prop2: "qwe" }, { prop1: "abc", prop2: "yutu" }, { prop1: "xyz", prop2: "qwrq" }]; var indexes = array.reduce((a, c, i/*Current index*/) => { if (c.prop1 == "abc") a.push(i); //Add the found index. return a; }, []/*Accumulator to store the found indexes.*/); console.log(indexes);
以下代碼適用於我:
var data = [{prop1:"abc",prop2:"qwe"},{prop1:"abc",prop2:"yutu"},{prop1:"xyz",prop2:"qwrq"}] var indexes = [] data.forEach((element, index)=>{ if(element.prop1 =="abc"){ indexes.push(index) } }); console.log(indexes)
您可以使用array.prototype.reduce
使用shorthand if
只使用一行代碼:
var arr = [ {prop1:"abc",prop2:"qwe"}, {prop1:"abc",prop2:"yutu"},{prop1:"xyz",prop2:"qwrq"} ]; var indexes = arr.reduce((m, e, i) => (e.prop1 === 'abc' && m.push(i), m), []); console.log(indexes);
有一種純粹的功能性方法,但它不是特別有效,因為它需要通過數組進行三次單獨的線性掃描:
let indexes = array.map((e, i) => [i, e])
.filter(([i, e]) => predicate(e))
.map(([i, _]) => i);
哪里
let predicate = e => e.prop1 === 'abc';
這通過創建一個臨時數組來實現,其中每個元素本身和包含原始索引和元素的數組。 然后它過濾掉謂詞函數不為真的那些,然后剝離數組,使它們只包含索引。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.