我有两个包含对象的数组。我正在尝试根据原始2个数组中提供的信息创建一个新数组。我有jQuery和Underscore可用。
2个数组如下所示:
var orgArray = [
{
"name": "phone",
"value": "123-456-7890"
},
{
"name": "color",
"value": "blue"
},
{
"name": "city",
"value": "San Diego"
},
{
"name": "zip",
"value": "54321"
},
{
"name": "email",
"value": "something@somewhere.com"
},
{
"name": "state",
"value": "CA"
},
{
"name": "Sale",
"value": "On Sale"
}
];
var configArray = [
{
"columns": ["phone", "city", "zip"],
"target": "phone"
},
{
"columns": ["email", "state"],
"target": "email"
}
];
如果configArray[i].columns
包含orgArray[i].name
中的字符串,则将target
属性添加到orgArray的对象中。这是我想要创建的新数组:
var newArray = [
{
"name": "phone",
"value": "123-456-7890",
"target": "phone"
},
{
"name": "color",
"value": "blue"
},
{
"name": "city",
"value": "San Diego",
"target": "phone"
},
{
"name": "zip",
"value": "54321",
"target": "phone"
},
{
"name": "email",
"value": "something@somewhere.com",
"target": "email"
},
{
"name": "state",
"value": "CA",
"target": "email"
},
{
"name": "Sale",
"value": "On Sale"
}
];
这是我现在的JS和小提琴:
jsFiddle:http://jsfiddle.net/9Dv2f/
var newArray = [];
_.each(orgArray, function(element, index, list) {
_.each(configArray, function(elem, i) {
_.each(elem.columns, function (el, x) {
if (element.name === el.name) {
console.log(element.name);
newArray.push({
name: element.name,
value: element.value,
target: elem.target
});
}
});
});
});
console.log(newArray);
答案 0 :(得分:1)
使用$.each()
即可:
$.each(orgArray, function(i, org){
$.each(configArray, function(j, config){
if(config.columns.indexOf(org.name) > -1){
orgArray[i].target = config.target;
}
});
});
答案 1 :(得分:1)
您应该测试elem.column中是否存在该名称,您可以使用.indexOf函数来执行此操作。 .indexOf函数返回找到的对象的索引(从0开始),如果未找到它将返回-1。
if(elem.columns.indexOf(element.name) > -1)
答案 2 :(得分:0)
一些强调方式,不确定(未确认),应该有效。 复制数组并根据您的条件将其映射到更新。
var newArray = orgArray;
_.map(newArray, function(elem){
_.each(configArray, function(elem_config, i) {
if(_.contains(elem_config, newArray.name)){
return newArray['target'] = elemconfig.target
}
}
}