我已经在SO和其他地方搜索过我能找到答案的所有内容,但却找不到答案,这主要归功于我有限的JS知识。
有人能告诉我如何从类似于以下数据的数组中提取值(dataLayer中的增强型电子商务数组);
var products = [
{ brand: "brandx", category: "categorya", name: "name123" },
{ brand: "brandy", category: "categoryb", name: "name345" }
];
我想在这种情况下提取名称,最后得到另一个只包含值的数组,例如: [name123,name345]。我想再次将其推入dataLayer,但我想我自己可以做到这一点。
我确实取得了一些成功,但这只是在选择名字值时。
提前感谢您提供任何帮助
的帮助马特
答案 0 :(得分:7)
.map
就是为了这个!
var names = products.map(function(product) { return product.name });
答案 1 :(得分:1)
假设你的名字属性总是存在,那就简单了:
var products = [
{ brand: "brandx", category: "categorya", name: "name123" },
{ brand: "brandy", category: "categoryb", name: "name345" }
];
var result = [];
for (var i = 0; i < products.length; i++){
result.push(products[i].name);
}
如果不考虑版本9以下的IE,你可以使用map,如@tymeJV所指出的那样:)
答案 2 :(得分:1)
This was already answered here.
You could use .map或for循环:
var namesArray = [];
for(index in products) {
namesArray.push(products[index].name);
}
namesArray;
=> [ 'name123', 'name345' ]
答案 3 :(得分:0)
这是使用forEach
的示例:
var products = [
{ brand: "brandx", category: "categorya", name: "name123" },
{ brand: "brandy", category: "categoryb", name: "name345" }
];
var names = [];
products.forEach(function(x){
names.push(x.name)
})
console.log(names)
&#13;
答案 4 :(得分:-1)
您要做的是将数组传递给map函数。使用underscore.js的示例
var newArray=_.map(products, function(value){return value.name})
map函数接受一个数组(或对象),通过一个iteree运行每个值,然后返回一个新数组。