簡體   English   中英

當索引滿足其他條件時,查找Javascript數組元素的值和索引

[英]Find value and index of Javascript array element when the index meets another condition

我有兩個數組:

arr1 = [0,1,1,0]
arr2 = [a,b,c,d]

我想找到arr2 [i]的值和相應的索引,其中i使得arr1 [i]!= 0而不循環遍歷arr2中的每個位置。 什么有效的技術可以完成以下任務:

arr2.forEach( ( 'element with index such that arr1[index] != 0') => {} );

**編輯**這個問題的最初發布尚不清楚是否需要記錄滿足條件的元素的索引。

編輯:獲取索引也很容易-更新了答案

您說您不想循環遍歷arr2,但是您可以做的是遍歷arr1並在每次命中時收集arr2各自的值,如下所示:

let result = []
arr1.forEach((value, idx) => {
    if (value !== 0) result.push({index: idx, value: arr2[idx]})
}

盡管這似乎是圍繞您的要求的一種技巧。 除此之外,我認為您別無選擇,只能遍歷任何一個數組(優化:僅遍歷最小的數組)。

如果你想完整的結果,你必須檢查ARR2的每一個元素的條件,因為如果你不存在仍然可能從你的結果缺少某些元素。

另一個解決方案是在arra1使用reduce()

 const arr1 = [0,1,1,0,1]; const arr2 = ["a","b","c","d","e"]; let res = arr1.reduce( (acc, v, idx) => v ? acc.concat({val: arr2[idx], idx}) : acc, [] ); console.log(res); 

只需使用filter

 arr1 = [0,1,1,0] arr2 = ['a','b','c','d'] console.log( arr2.filter((item, index) => arr1[index] !== 0) ) 

您可以將數組1減少到所需的索引,並且在需要值時可以將它們映射到數組2中的值。

 let arr1 = [0, 1, 1, 0]; let arr2 = ['a', 'b', 'c', 'd']; let indexes = arr1.reduce((results, val, index) => { if (val) { results.push(index); } return results; }, []); console.log(indexes); let vals = indexes.map(idx => arr2[idx]); console.log(vals); 

試試$.each()

 $(function() { var arr1 = [0, 1, 1, 0]; var arr2 = ['a', 'b', 'c', 'd']; $.each(arr1, function(k, v) { if (!v) { console.log(arr2[k]); } }); }); 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> 

顯然,數組必須具有相等的大小,否則arr1可以小於arr2

希望能有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM