仅在适合.filter的元素上数组.map

时间:2018-06-21 17:28:31

标签: javascript arrays typescript

我想遍历数组并在适当位置更新元素。我只想遍历适合过滤器的元素。我该怎么办?

天真的方法:

next

我希望使用.map和.filter,我应该能够更高效,更内联地做到这一点。

3 个答案:

答案 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 ]