JavaScript提取并处理数组中的值

JavaScript提取并处理数组中的值,javascript,jquery,underscore.js,Javascript,Jquery,Underscore.js,我有一个JavaScript数组,其中包含的对象几乎没有属性。我想从这个数组中创建一个新数组,其中包含对象的“name”属性值。另外,我想通过使用jQuery的quot.escape方法来处理“name” 我可以看到,在获取“name”属性值数组时,下划线的“pull”非常方便。但是,我找不到是否有任何方法在提取时处理该值,这样我就不需要迭代数组并对每个数组调用u.escape 有什么帮助吗?有三个选项供您选择: reduce 一种相当传统的方法是使用reduce-或者ES5的内置方法: //

我有一个JavaScript数组,其中包含的对象几乎没有属性。我想从这个数组中创建一个新数组,其中包含对象的“name”属性值。另外,我想通过使用jQuery的quot.escape方法来处理“name”

我可以看到,在获取“name”属性值数组时,下划线的“pull”非常方便。但是,我找不到是否有任何方法在提取时处理该值,这样我就不需要迭代数组并对每个数组调用u.escape

有什么帮助吗?

有三个选项供您选择:

reduce
一种相当传统的方法是使用
reduce
-或者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
作为参数,通常称为
memo
last
,因为我们实际上并没有更改它的值,只更改它的内容。)

$.map
由于您已经标记了问题
jquery
,另一个选项是
$.map
。与下划线或ES5的
map
不同,
$.map
允许您通过返回
null
未定义的
将条目从结果数组中删除。因此:

var newArray = $.map(existingArray, function(entry) {
    return condition ? entry.relevantProperty : null;
});
用于每个
当然,好的老式
for
循环、
forEach
调用或
调用都没有什么错。后者:

var newArray = [];
_.each(existingArray, function(entry) {
    if (condition) {
        newArray.push(entry.relevantProperty);
    }
});
唯一的缺点是,它不能是一个表达式,因此,如果要传递到函数或其他对象中,前两个表达式有时更合适(尽管使用temp变量并不是世界末日,而且有助于调试)