[英]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.