繁体   English   中英

获取Java数组元素的特定属性的值

[英]Get values of specific property of array elements in Javascript

我对Javascript有以下问题,假设我们有srcArr-对象数组,每个对象定义如下

var srcElement = {id:id_val , prop1:value1, prop2:value2}

我需要获取数组元素的id-s数组。例如{id;:id_val}之类的元素数组最简单的方法是这样的

var arrayLength = srcArr.length;
for (var index=0; index<arrayLength;index++) {
  idsArr.push(srcArr[index].id);     
}

问题是:是否有更有效的方法来获取数组元素的ID?
提前致谢

常见的可重用功能方法:

var collec = [
  {num:1, str:'a'},
  {num:2, str:'b'}
];

var dot = function(prop) {
  return function(obj) {
    return obj[prop];
  }
};

collec.map(dot('num')); //=> [1,2]
collec.map(dot('str')); //=> ['a','b']

使用underscore.js的map函数

srcArr = [{id:1}, {id:2}]
var result = _.map(srcArr, function(el){
    return el.id
});
//result = [1,2]

map将对每个元素执行相同的功能,并将结果添加到新数组中

编辑:这不像本地循环一样快。

http://jsperf.com/javascript-map-vs-jquery-map-vs-jquery-each

map方法可以用作迭代器,但实际上是要操纵提供的数组并返回一个新数组。

所以最后:

For loop mapJquery map快得多。 在这里测试相同的性能

干得好:

var srcArray = [{
    id: 1,
    prop1: 'a',
    prop2: 'b'
}, {
    id: 2,
    prop1: 'c',
    prop2: 'd'
}];
map = function (array, mapFunction) {
    var newArray = new Array(array.length);
    for (var i = 0; i < array.length; i++) {
        newArray[i] = mapFunction(array[i]);
    }

    return newArray;
}
var newItems = map(srcArray, function (i) {
    return i.id;
});

产量

newItems: [1,2]

现场演示

在此处输入图片说明

如果有效的手段短期和可读性,你可以使用Lodash pluck功能:

var idsArr = _.pluck(srcArr, 'id');

http://lodash.com/docs#pluck

这是源代码: https : //github.com/lodash/lodash/blob/2.4.1/dist/lodash.compat.js#L3848 我怀疑它比旧的for循环要慢,但是如果您确实关心它,则应该运行一些性能测试: google“ jsperf map”

也就是说,编写您自己的pluck函数非常容易:

function pluck(src, key) {
    var i = 0, l = src.length, result = [];
    while (i < l) result.push(src[i++][key]);
    return result;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM