如果我有一个这样的对象
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并手动将每个键属性复制到键数组的情况下执行此操作?
答案 0 :(得分:20)
var keyArray = objArray.map(function(item) { return item["key"]; });
如果您打算经常这样做,您可以编写一个抽象地图的函数:
function pluck(array, key) {
return array.map(function(item) { return item[key]; });
}
事实上,Underscore库有一个名为pluck的内置函数,它正是这样做的。
答案 1 :(得分:1)
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示例
答案 2 :(得分:0)
你会想做这样的事情:
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;
}
答案 3 :(得分:0)
某些东西必须遍历数组的元素。您可以使用.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"));
答案 4 :(得分:0)
真的“objArray”是一个里面有3个对象的数组,如果你想要键列表,可以试试这个:
var keys = [];
for(a in objArray) {
keys.push(objArray[a].key);
}
你有var键,三个键。
希望有所帮助! :)