仅从Javascript中的对象数组返回某些属性[重复]
Posted
技术标签:
【中文标题】仅从Javascript中的对象数组返回某些属性[重复]【英文标题】:Returning only certain properties from an array of objects in Javascript [duplicate] 【发布时间】:2014-08-17 21:21:03 【问题描述】:如果我有这样的对象
var object = function(key,text)
this.key = key;
this.text = text;
并创建这些对象的数组
var objArray = [];
objArray[0] = new object('key1','blank');
objArray[1] = new object('key2','exampletext');
objArray[2] = new object('key3','moretext');
有没有一种方法可以只检索数组中所有对象的一个属性?例如:
var keyArray = objArray["key"];
上面的例子没有返回 set keyArray 到任何东西,但我希望它会被设置成这样:
keyArray = [
'key1',
'key2',
'key3']
有谁知道不遍历 objArray 并手动将每个键属性复制到键数组的方法?
【问题讨论】:
【参考方案1】:这可以通过Array.prototype.map() 函数轻松完成:
var keyArray = objArray.map(function(item) return item["key"]; );
如果您要经常这样做,您可以编写一个抽象出地图的函数:
function pluck(array, key)
return array.map(function(item) return item[key]; );
事实上,Underscore 库有一个名为 pluck 的内置函数,它正是这样做的。
【讨论】:
IE 8 及以下不支持map
上面链接的 MDN 文档包括 IE8 及以下版本的 polyfill。
function pluck(obj)return obj[this] 允许 r.map(pluck,"key")
@dandavis:同意,组合得更好(例如,您可以调用 r.filter(pluck, "key")
来查找具有给定键的项目)。我的版本只是近似于 Underscore 的 _.pluck
所做的。
有时我想做一些类似的事情(只保留 javascript 对象中的某些属性):***.com/a/67591318/470749【参考方案2】:
var object = function(key,text)
this.key = key;
this.text = text;
var objArray = [];
objArray[0] = new object('key1','blank');
objArray[1] = new object('key2','exampletext');
objArray[2] = new object('key3','moretext');
var keys = objArray.map(function(o,i)
return o.key;
);
console.log(keys); // ["key1", "key2", "key3"]
JS Bin 示例
http://jsbin.com/vamey/1/edit
请注意,旧版浏览器可能不支持map,但您可以使用for
循环轻松做到这一点:
var keys = [];
for (var i = 0; i < objArray.length; i++)
keys.push(objArray[i].key);
JS Bin 示例
http://jsbin.com/redis/1/edit
【讨论】:
【参考方案3】:你会想做这样的事情:
objArray.map(function (obj) return obj.key; );
这是一个 JSFiddle 演示:http://jsfiddle.net/Q7Cb3/
如果需要旧版浏览器支持,可以使用自己的方法:
JSFiddle 演示:http://jsfiddle.net/Q7Cb3/1/
function map (arr, func)
var i = arr.length;
arr = arr.slice();
while (i--) arr[i] = func(arr[i]);
return arr;
【讨论】:
注意旧版浏览器可能不支持map
。【参考方案4】:
something 必须遍历数组的元素。你可以使用.map()
让它看起来不错:
var keys = objArray.map(function(o) return o.key; );
您可以创建一个函数来生成一个检索特定键的函数:
function plucker(prop)
return function(o)
return o[prop];
;
然后:
var keys = objArray.map(plucker("key"));
【讨论】:
【参考方案5】:真正的“objArray”是一个里面有3个对象的数组,如果你想要键列表,你可以试试这个:
var keys = [];
for(a in objArray)
keys.push(objArray[a].key);
你有 in var 键,三个键。
希望对您有所帮助! :)
【讨论】:
在 JavaScript 中使用for ... in
遍历数组是不好的做法。
for(var a = 0; a
以上是关于仅从Javascript中的对象数组返回某些属性[重复]的主要内容,如果未能解决你的问题,请参考以下文章