使用一个属性连接对象数组

14

我有一个包含几个属性(如'value'和'label')的对象数组。

array.join(' ') 当然会得到 "[object] [object]",但是我需要获得所有对象的'value'属性组成的字符串,以空格分隔。

有没有最短的方法可以做到这一点?而且是否可以不编写for循环来实现?


1
你的对象是否相似?换句话说,它们是否可以由单个构造函数创建?如果是这样,那么你只需要在你的Constructor.prototype对象中添加一个.toString()方法来定义转换为字符串时应该如何显示。然后你就可以使用array.join(" ") - user2437417
这里有一个演示:http://jsfiddle.net/2fYvN/。这比手动映射数组到新值再连接更好。 - user2437417
2个回答

28

尝试使用jQuery.map() - 不使用Array.map()是因为它不支持IE < 9。

对于JSON.stringify() - 使用json2来支持旧版浏览器。

$.map(array, function(obj){return JSON.stringify(obj)}).join(' ')

更新:获取值属性

var string = $.map(array, function(obj){
    return obj.value
}).join(' ');

Demo: Fiddle


似乎你缺少了return语句。 - Ram
1
看起来我没有解释清楚。我编辑了我的问题,因为我需要一个由数组中所有对象的'value'属性组成的用空格分隔的字符串。 - Steven De Groote
@StevenDeGroote,你能给一个[{name: 'name1', age: 30, value: 'v1'},{name: 'name2', age: 27, value: 'v2'}]的例子吗? - Arun P Johny
我解决了。我只需要 $.map(array, function(obj){return obj.value}).join(' ')。感谢您指引的方向! - Steven De Groote
对于那些使用ES5 shim或不关心IE8或以下版本并想避免jquery的人,语法几乎相同。只需使用array.map(function(...而不是$.map(array, function(... - jgawrych

8
使用 Array.map 方法:
let data = [
  {
    "animal": "cat",
    "name": "Fluffy"
  },
  {
    "animal": "dog",
    "name": "Bowser"
  },
  {
    "animal": "cat",
    "name": "Felix"
  }
]

现在使用.map提取名称:
let names = data.map(item => item.name)


let nameString = names.join(' ')

现在nameString包含Fluffy Bowser Felix


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接