[英]Filter array by array of indexes
我有第一個值數組和第二個索引數組。 我想過濾第一個數組,只返回第二個數組中有索引的值。
所以,給定:
arr1 = [4775453877338112, 5901353784180736, 6605041225957376]
arr2 = [0,2]
我想回復:
output = [4775453877338112, 6605041225957376]
謝謝。 對於獎勵積分,為什么以下不起作用?
var output = arr1.filter( (item) => arr1.indexOf(item) in arr2 === true )
抱歉,如果這個簡單的問題與此重復: 基於索引數組的過濾器數組 ,但是下划線讓我失望。
對於獎勵積分,為什么以下不起作用?
因為您正在檢查arr2
是否存在索引 ,而不是項目本身 。
只需使用map
var output = arr2.map( s => arr1[s] );
演示
var arr1 = [4775453877338112, 5901353784180736, 6605041225957376]; var arr2 = [0,2]; var output = arr2.map( s => arr1[s] ); console.log( output );
var output = arr1.filter( (item) => arr1.indexOf(item) in arr2 === true )
indexOf返回元素的索引而不是布爾值。 您可以使用新的Array.prototype.includes
或test for value為-1
此外,如果順序相同,您可以循環索引數組。
const arr1 = [4775453877338112, 5901353784180736, 6605041225957376] const arr2 = [0,2] const output = arr2.map(i => arr1[i]) console.log(output)
您可能只需要一個簡單的循環:
arr1 = [4775453877338112, 5901353784180736, 6605041225957376];
arr2 = [0,2];
arr3 = [];
for (i = 0; i < arr2.length; i++) {
arr3.push(arr1[arr2[i]]);
}
結果:
Array [ 4775453877338112, 6605041225957376 ]
編寫可讀代碼而不是復雜代碼時,您的任務更容易:
var arr1 = [4775453877338112, 5901353784180736, 6605041225957376]; var arr2 = [0,2]; var output = []; for (var i = 0; i < arr2.length; i++) { output.push(arr1[ arr2[i] ]); } console.log(output);
這是一個不使用額外的空數組而沒有嵌套for循環的解決方案。 也適用於O(n)而不是O(n ^ 2),這里有人建議。
var arr1 = [4775453877338112, 5901353784180736, 6605041225957376];
var arr2 = [0,2];
var result = arr2.map(i => arr1[i]);
嘗試以下方法:`
let arr1 = [4775453877338112, 5901353784180736, 6605041225957376] let arr2 = [0,2] let result = arr1.filter(i => arr2.includes(arr1.indexOf(i))) console.log(result);
`
嘗試這個
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width"> <title>JS Bin</title> </head> <body> <script src="https://code.jquery.com/jquery-3.1.0.js"></script> <script> $("document").ready(function(){ arr1 = [4775453877338112, 5901353784180736, 6605041225957376] arr2 = [0,2] $.each( arr2, function( key, value ) { alert( arr1[value]); }); }) </script> </body> </html>
不使用lodash,這是一種解決方法。 不要使用arr.forEach,它比for慢。
const arr1 = [4775453877338112, 5901353784180736, 6605041225957376]
const arr2 = [0,2]
const finalArray = [];
let j = 0;
for (let i = 0, len = arr1.length; i < len; i++) {
if(i==arr2[j]) {
j++;
finalArray.push(arr1[i]);
}
}
修改輸出變量,如下所示:
var output = arr1.filter((item) => arr2.includes(arr1.indexOf(item)));
為了更具體而不管價值的類型,使用反射概念。
import java.lang.reflect.Array; 。 。 。
。
。 int [] arr1 = {1,3,7}; int [] arr2 = {0,2};
for(var i = 0; i <arr2.length; i ++){Object o = Array.get(arr1,arr2 [i]);
的System.out.println(O);
}
輸出:1 7
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.