我目前有一个对象数组,其中每个对象都有几个属性。例如:
[
{ text: 'test1',
id: 1
},
{ text: 'test2',
id: 2
}
]
将此转换为包含text
值的字符串数组的最佳方法是什么?我以为我可以使用underscore.js:
headerText = _.pick(headerRow, 'text');
但我认为,由于对象在数组中,因此不起作用。我的下一个想法是循环遍历数组中的每个元素并将text
值推送到新数组,但我很好奇是否有人知道更优雅的方法来执行此操作?建议?
答案 0 :(得分:4)
您正在寻找Array#map
:
var stringArray = headerRow.map(function(entry) {
return entry.text;
});
您甚至不需要Underscore,Array#map
是ES5的一部分,并且完全受到V8(Node使用的JavaScript引擎)的支持。 Array#map
为数组中的每个条目调用一次给它的函数,并根据该函数的返回值构建一个新数组。
或者,如果您想更改现有数组,可以使用Array#forEach
:
headerRow.forEach(function(entry, index) {
headerRow[index] = entry.text;
});
答案 1 :(得分:1)
使用_.map(headerRow, function(row) { return row.text; })
。 IE中不提供Array.map
< 9。
答案 2 :(得分:0)
我会使用foreach并循环浏览它。
var jamie = [
{ text: 'test1',
id: 1
},
{ text: 'test2',
id: 2
}
];
var length = jamie.length,
element = [];
for (var i = 0; i < length; i++) {
element[i] = jamie[i].id;
// Do something with element i.
}
console.info(element);
答案 3 :(得分:-1)
这是一个vanilla javascript版本,可以避免使用非普遍支持的Array.map
方法。
// assign the array to a variable
var a = [
{ text: 'test1',
id: 1
},
{ text: 'test2',
id: 2
}
];
// loop through each item in the array, reassigning with it's text value
// not like this: for(i in a) a[i] = a[i].text
// but with a for loop based on the array length
var i;
for(i=a.length; i; i--){ a[i-1] = a[i-1].text; }
// check the results
console.log(a);
// ["test1", "test2"]