只返回某些数组元素而不是全部数组元素的简单值



我制作了一个简单的变量'indexes',它成功地识别了数组'arr'中的奇数索引,并且前一个值是奇数,它不测试第一个数字。然而,在定义索引变量时,它最初返回:

[undefined, 1, 2, undefined, undefined]

然后,我必须过滤掉未定义的值,以实现我想要的([1,2](。

有没有一种方法可以在一行中做到这一点而不需要过滤?我想不出一种方法。还有,有没有一种方法只返回某些元素的数组值,而不是像map那样返回所有元素的值?我想使用some方法,但它只是返回一个布尔值,而不是一些项的数组。

谢谢你的帮助。我的代码如下:

let arr = ["9", "9", "9", "4", "6"];
let indexes = arr.map(function(c,i,a){if (i != 0 && c % 2 != 0 && a[i-1] % 2 != 0) {return i} }); // [undefined, 1, 2, undefined, undefined]
indexes = indexes.filter(item => item !== undefined); // [1,2]

您可以使用reduce函数,该函数允许您迭代一个集合并累积任何您想要的数据:

let arr = ["9", "9", "9", "4", "6", "7"];
let indexes = arr.reduce((acc, el, index) => {
if (index != 0 && el % 2 != 0 && arr[index-1] % 2 != 0) {
acc.push(index);
}
return acc;
}, []);

实际上,使用reduce可以很容易地实现filtermap,因为您可以初始化一个空数组,并且根据回调函数,您可以将元素添加到最终数组中,也可以操作每个元素的值。

是的,有一种方法可以在1行中完成

您可以将.reduce与作为参数传递的累加器、元素和索引一起使用。然后使用三元运算符替换if语句,然后使用排列语法(...(将值推送/附加到累加器数组:

let arr = ["9", "9", "9", "4", "6"];
const indexes = arr.reduce((acc, elem, i) => (i != 0 && elem % 2 != 0 && arr[i-1] % 2 != 0) ? [...acc, i] : acc, []);
console.log(indexes);

注意:一行代码并不总是更好,代码可读性很重要,因为它有助于程序的可维护性。

您可以使用数组缩减函数

let arr = ["9", "9", "9", "4", "6"];
let indexes = arr.reduce(function(acc, curr, i, a) {
if (i !== 0 && curr % 2 !== 0 && a[i - 1] % 2 !== 0) {
acc.push(i);
}
return acc;
}, []);
console.log(indexes)

相关内容

  • 没有找到相关文章

最新更新