仅从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中的对象数组返回某些属性[重复]的主要内容,如果未能解决你的问题,请参考以下文章

仅从EntitySet返回一个对象

JavaScript Array 对象

JavaScript对象数组如何按指定属性和排序方

javascript对象

JavaScript--- 对象

JavaScript 数组(Array)对象