javascript - 如何从循环中排除索引数组

标签 javascript arrays

我有一个这样的数组 y:

var y = [1, 2, 3, 4];

我想遍历数组,但排除一些索引。索引保存在第二个数组中

var x = [1,3];

所以,我想写入数组 y 中的每个数字,但不是位置 1,3 上的数字,它们来自数组 x

我试图跳过这些位置上的数字,但没有成功。请你帮助我好吗? 这是我试过的

for (var i = 0; i < y.length; i++) {
    for (var j = 0; j < x.length; j++) {
            if (i === x[j]) {
        continue;
     } 
    }
 console.log(y[i]);
}

最佳答案

简答

更喜欢使用 filter在一个循环中

const xs = [ 1, 2, 3, 4, 5 ]  // array of values
const ys = [ 1, 3 ]           // indices to skip

// using `filter`
const zs = xs.filter((_, i) => !ys.includes(i))

console.log(zs)
//=> [ 1, 3, 5 ]

长答案

在可能的情况下,您不希望使用循环,因为它会损害理解您的代码的能力,而采用过程性方法而不是声明性方法。您可以改用 higher-order function喜欢Array.prototype.filter保持你想要的值(value)。传递给 filter 的函数的返回值需要返回一个 bool 值,表示要保留的内容。在 JavaScript 中,filter 函数是二进制参数,这意味着它有两个参数,第一个参数是数组元素,第二个是索引。我们可以忽略数组元素值,因为它只是我们需要检查的索引(这就是函数以 (_, ...) 开头以删除第一个参数的原因)。

Array.prototype.includes是数组原型(prototype)上的一个函数,它让您知道数组是否包含一个值(即 [0].includes(0) === true[0].includes(1) == false).

将这两个概念放在一起,我们可以迭代第一个数组 xs,忽略值但使用索引来查看它是否包含在我们的黑名单索引数组 ys.

如果我们将其视为包含我们值的 map 函数,而不是 filter

xs.map((v, i) => [ v, !ys.includes(i) ])
//=> [ [ 1, true ], [ 2, false ], [ 3, true ], [ 4, false ], [ 5, true ] ]

我们可以看到哪些值将是 true。如果我们还记得的话,过滤器会保留我们的 true[ 1, 3, 5 ]

关于javascript - 如何从循环中排除索引数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48270488/

相关文章:

javascript - 解析保存方法给出 400 错误

JavaScript 奇怪的对象

javascript - 加载内部内容后调整大小 'iframe'

c - 在C中将字符串拆分为数组

javascript - 如何在javascript中将json对象存储在数组中 var objdata = $.parseJSON(data.d);

javascript - JavaScript 中的排序函数在某些情况下无法给出正确的输出?

javascript - 如果我选择第二个下拉框,如何获取第一个下拉框的值

javascript - JavaScript 中的反斜杠错误

javascript - 随机化子节点并重新分配为 Javascript 中单独节点的子节点

java - 如何比较对象数组的值?