JavaScript提取并处理数组中的值

JavaScript pluck and process values in an array

本文关键字:数组 处理 提取 JavaScript      更新时间:2023-09-26

我有一个JavaScript数组,其中包含一些属性较少的对象。我想从这个数组中创建一个新数组,其中包含对象的"name"属性值。此外,我想使用jQuery的_.sescape方法来处理"名称"。

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

有什么帮助吗?

三个选项可供选择:

reduce

一种相当传统的方法是使用reduce—Undercore或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。与Undercore或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);
    }
});

唯一的缺点是它不能是一个表达式,所以如果你要传递到一个函数或其他东西中,前两个表达式有时更合适(尽管使用临时变量并不是世界末日,而且有助于调试)。