我有第一个值数组和第二个索引数组。我想过滤第一个数组,只返回第二个数组中有索引的值。
所以,给定:
arr1 = [4775453877338112, 5901353784180736, 6605041225957376]
arr2 = [0,2]
我想回复:
output = [4775453877338112, 6605041225957376]
感谢。对于奖励积分,为什么以下不起作用?
var output = arr1.filter( (item) => arr1.indexOf(item) in arr2 === true )
道歉,如果这个简单的问题与此重复:Filter array based on an array of index,但是下划线让我失望。
答案 0 :(得分:7)
对于奖励积分,为什么以下不起作用?
因为您正在检查如果<{1}}中存在索引,而不是项目本身。
只需使用arr2
map
<强>演示强>
var output = arr2.map( s => arr1[s] );
答案 1 :(得分:4)
var output = arr1.filter( (item) => arr1.indexOf(item) in arr2 === true )
indexOf返回元素的索引而不是布尔值。您可以使用新的Array.prototype.includes
或测试值为-1
此外,如果顺序相同,则可以循环索引数组。
const arr1 = [4775453877338112, 5901353784180736, 6605041225957376]
const arr2 = [0,2]
const output = arr2.map(i => arr1[i])
console.log(output)
答案 2 :(得分:3)
您可能只需要一个简单的循环:
arr1 = [4775453877338112, 5901353784180736, 6605041225957376];
arr2 = [0,2];
arr3 = [];
for (i = 0; i < arr2.length; i++) {
arr3.push(arr1[arr2[i]]);
}
结果:
Array [ 4775453877338112, 6605041225957376 ]
答案 3 :(得分:1)
编写可读代码而不是复杂代码时,您的任务更容易:
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);
答案 4 :(得分:1)
这是一个不使用额外的空数组而没有嵌套for循环的解决方案。也适用于O(n)而不是O(n ^ 2),这里有人建议。
var arr1 = [4775453877338112, 5901353784180736, 6605041225957376];
var arr2 = [0,2];
var result = arr2.map(i => arr1[i]);
答案 5 :(得分:0)
尝试以下方法: `
let arr1 = [4775453877338112, 5901353784180736, 6605041225957376]
let arr2 = [0,2]
let result = arr1.filter(i => arr2.includes(arr1.indexOf(i)))
console.log(result);
`
答案 6 :(得分:0)
试试这个
<!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>
答案 7 :(得分:0)
不使用lodash,这是一种解决方法。不要使用arr.forEach,它比。
慢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]);
}
}
答案 8 :(得分:0)
修改输出变量,如下所示:
var output = arr1.filter((item) => arr2.includes(arr1.indexOf(item)));
答案 9 :(得分:-1)
无论值的类型如何,都要更具体,请使用反射概念。
import java.lang.reflect.Array; 。 。
。 int [] arr1 = {1,3,7}; int [] arr2 = {0,2};
for(var i = 0; i&lt; arr2.length; i ++){ Object o = Array.get(arr1,arr2 [i]);
的System.out.println(○);
}
输出: 1 7