我想遍历数组并在适当位置更新元素。我只想遍历适合过滤器的元素。我该怎么办?
天真的方法:
next
我希望使用.map和.filter,我应该能够更高效,更内联地做到这一点。
答案 0 :(得分:4)
不需要filter()
,只需使用Array.prototype.map()
,如下所示:
var arr = [5, 10, 15]
arr = arr.map(element => element > 5? element = 9 : element);
console.log(arr);
答案 1 :(得分:1)
由于问题要求“就地”更新,因此该方法将更新现有阵列:
let arr = [20, 5, 6, 1];
arr.forEach((e, i) => { if (e > 5) arr[i] = 9; })
console.log(arr)
现在,该问题实际上还要求一种方法,该方法仅循环匹配过滤器的项目,但这似乎是多余的,因为 something 必须循环遍历每个元素。
答案 2 :(得分:1)
如果您不太在意性能,并且想找点乐子:
Array.prototype.mutate = function (cb) {
var updates = {};
this.forEach(function (element, index) {
var wrapper = {
value: function () {
return element;
},
update: function (value) {
updates[index] = value;
}
};
cb(wrapper, index);
});
var self = this;
Object.keys(updates).forEach(function (index) {
var value = updates[index];
self[index] = value;
});
};
var a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
a.mutate(function (wrapper) {
if (wrapper.value() % 2 === 0) {
wrapper.update(wrapper.value() * 2);
}
});
console.log(a); //[ 1, 4, 3, 8, 5, 12, 7, 16, 9, 20 ]