JavaScript在数组中采集和处理值

时间:2014-10-27 08:23:39

标签: javascript jquery underscore.js

我有一个包含具有少量属性的对象的JavaScript数组。我想从这个数组创建一个包含" name"的值的新数组。对象的属性。另外,我想处理"名称"使用jQuery' s _.escape方法。

我可以看到"采摘"下划线可以非常方便地得到一个" name"属性值。但是我无法找到是否有任何方法可以在处理时处理值,这样我就不需要遍历数组并在每个数组上调用_.escape。

任何帮助?

1 个答案:

答案 0 :(得分:0)

为您提供三种选择:

reduce

一种相当传统的方法是使用reduce - Underscore's或ES5的内置版本:

// ES5
var newArray = existingArray.reduce([], function(result, current) {
    if (condition) {
        result.push(current.relevantProperty);
    }
    return result;
});

// Underscore:
var newArray = _.reduce(existingArray, function(result, current) {
    if (condition) {
        result.push(current.relevantProperty);
    }
    return result;
}, []);

(在那里我使用名称result作为通常称为memolast的参数,因为我们实际上并没有更改其值,只是其内容。)

$.map

由于您已标记了问题jquery,因此另一个选项是$.map。与Underscore或ES5的map不同,$.map允许您通过返回nullundefined将条目从结果数组中删除。所以:

var newArray = $.map(existingArray, function(entry) {
    return condition ? entry.relevantProperty : null;
});

for / forEach / each

当然,一个好的老式for循环,forEach来电或_.each来电都没有错。后者:

var newArray = [];
_.each(existingArray, function(entry) {
    if (condition) {
        newArray.push(entry.relevantProperty);
    }
});

唯一的缺点是它不能是一个表达式,所以前两个有时候更适合你传入一个函数或什么东西(虽然使用一个临时变量不是世界末日,并且可以帮助调试。)