[英]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 map
比Jquery 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');
这是源代码: 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.