如何在javascript中向数组中插入值
如果值匹配,我想将值从一个数组插入到另一个数组 这些是我的数组如何在javascript中向数组中插入值,javascript,arrays,json,Javascript,Arrays,Json,如果值匹配,我想将值从一个数组插入到另一个数组 这些是我的数组 var names = [{key: 'Apple'}, {key: 'Dell'}, {key: 'Xitrix'}]; var data = [ {enum_name:'Apple', date:'2000-12-15', accomp: 12}, {enum_name:'Dell', date:'2000-12-15', accomp: 8}, {enum_name:'Apple', date:'
var names = [{key: 'Apple'}, {key: 'Dell'}, {key: 'Xitrix'}];
var data = [
{enum_name:'Apple', date:'2000-12-15', accomp: 12},
{enum_name:'Dell', date:'2000-12-15', accomp: 8},
{enum_name:'Apple', date:'2000-12-16', accomp: 12},
{enum_name:'Xitrix', date:'2000-12-16', accomp: 12},
{enum_name:'Dell', date:'2000-12-17', accomp: 8},
{enum_name:'Xitrix', date:'2000-12-17', accomp: 12},
];
然后我想用一个特定的键(例如attrib:[arrays])将data.date和data.acomp插入数组name
我有这段代码,但它没有将所有匹配的数据插入键属性
var counts = 0;
_.each(names, function(v, k){
_.each(data, function(val, key){
if(v.key == val.enum_name){
var date = val.date;
var accomp= val.accomp;
names[k].attrib= [[date, accomp]];
console.log(counts);
counts++;
}
});
counts = 0;
//names[k]['values'] = 'test';
});
我想要这样的输出
names = [
{key: 'Apple', attrib: [['2000-12-15', 12], ['2000-12-16', 12]]},
{key: 'Dell', attrib: [['2000-12-15', 8], ['2000-12-17', 8]]},
{key: 'Xitrix', attrib: [['2000-12-16', 12], ['2000-12-17', 12]]}
];
尝试使用
reduce
到一个对象中,该对象由enum\u name
索引,具有date
s和acomp
s数组,然后获取该对象的值,无需库,运行时复杂性更低:
var name=[{key:'Apple'},{key:'Dell'},{key:'Xitrix'}];
风险值数据=[
{枚举名:'Apple',日期:'2000-12-15',会计:12},
{姓名:'Dell',日期:'2000-12-15',会计科目:8},
{枚举名:'Apple',日期:'2000-12-16',会计:12},
{枚举名:'Xitrix',日期:'2000-12-16',会计科目:12},
{姓名:'Dell',日期:'2000-12-17',会计科目:8},
{枚举名:'Xitrix',日期:'2000-12-17',会计科目:12},
];
console.log(Object.values(
data.reduce((a,{enum_name:key,date,acomp})=>{
如果(!a[key])a[key]={key,attrib:[]};
一个[key].attrib.push([date,acomp]);
返回a;
}, {})
))
尝试使用reduce
将对象索引为enum\u name
,数组为date
s和acomp
s,然后获取该对象的值,无需库,运行时复杂性更低:
var name=[{key:'Apple'},{key:'Dell'},{key:'Xitrix'}];
风险值数据=[
{枚举名:'Apple',日期:'2000-12-15',会计:12},
{姓名:'Dell',日期:'2000-12-15',会计科目:8},
{枚举名:'Apple',日期:'2000-12-16',会计:12},
{枚举名:'Xitrix',日期:'2000-12-16',会计科目:12},
{姓名:'Dell',日期:'2000-12-17',会计科目:8},
{枚举名:'Xitrix',日期:'2000-12-17',会计科目:12},
];
console.log(Object.values(
data.reduce((a,{enum_name:key,date,acomp})=>{
如果(!a[key])a[key]={key,attrib:[]};
一个[key].attrib.push([date,acomp]);
返回a;
}, {})
))首先,创建一个包含名称
元素的对象,该对象由键
属性设置键,因此很容易找到特定键的元素,并向其添加属性
洛达斯:
var namesObj = _.forEach(_.keyBy(names, 'key'), n => n.attrib = []);
下划线.js:
var namesObject = _.each(_.indexBy(names, 'key'), n => n.attrib = []);
然后,可以在数据上循环并将属性推送到适当的对象上
_.each(data, ({enum_name, date, accomp}) =>
namesObj[enum_name].attribs.push([date, accomp])
);
首先,创建一个包含名称
元素的对象,该对象由键
属性设置键,因此很容易找到特定键的元素,并将attrib
属性添加到该对象中
洛达斯:
var namesObj = _.forEach(_.keyBy(names, 'key'), n => n.attrib = []);
下划线.js:
var namesObject = _.each(_.indexBy(names, 'key'), n => n.attrib = []);
然后,可以在数据上循环并将属性推送到适当的对象上
_.each(data, ({enum_name, date, accomp}) =>
namesObj[enum_name].attribs.push([date, accomp])
);
请尝试以下代码:[]
var name=[{key:'Apple'},{key:'Dell'},{key:'Xitrix'}];
风险值数据=[
{enum_name:'Apple',date:'2000-12-15',accomp:12},
{enum_name:'Dell',date:'2000-12-15',accomp:8},
{enum_name:'Apple',date:'2000-12-16',accomp:12},
{enum_name:'Xitrix',date:'2000-12-16',acomp:12},
{enum_name:'Dell',date:'2000-12-17',accomp:8},
{enum_name:'Xitrix',date:'2000-12-17',acomp:12}
];
//新阵列
var新_数据=[];
//循环名称
_.每个(名称、功能(v){
//初始化新对象
var obj={key:v.key,attrib:[]};
//按下划线查找,带名称键和数据枚举名称
var finds=\其中(数据,{enum\ u name:v.key});
//如果使用lodash,则更改为u.find:
//var finds=u.find(数据,{enum_name:v.key});
//循环查找
_.每个(查找、函数(值){
//添加属性
对象属性推送([value.date,value.acomp]);
});
//将obj添加到新阵列
新数据推送(obj);
});
console.log(新的_数据);
请尝试以下代码:[]
var name=[{key:'Apple'},{key:'Dell'},{key:'Xitrix'}];
风险值数据=[
{enum_name:'Apple',date:'2000-12-15',accomp:12},
{enum_name:'Dell',date:'2000-12-15',accomp:8},
{enum_name:'Apple',date:'2000-12-16',accomp:12},
{enum_name:'Xitrix',date:'2000-12-16',acomp:12},
{enum_name:'Dell',date:'2000-12-17',accomp:8},
{enum_name:'Xitrix',date:'2000-12-17',acomp:12}
];
//新阵列
var新_数据=[];
//循环名称
_.每个(名称、功能(v){
//初始化新对象
var obj={key:v.key,attrib:[]};
//按下划线查找,带名称键和数据枚举名称
var finds=\其中(数据,{enum\ u name:v.key});
//如果使用lodash,则更改为u.find:
//var finds=u.find(数据,{enum_name:v.key});
//循环查找
_.每个(查找、函数(值){
//添加属性
对象属性推送([value.date,value.acomp]);
});
//将obj添加到新阵列
新数据推送(obj);
});
console.log(new_data);
{'2000-12-17',12}
这是无效的语法,你到底想要什么?这里没有jQuery。你使用的是下划线.js或lodash。请编辑问题以指定。在{date,completed}
中,你是指acomp
吗?对不起{2000-12-17',12}
这是无效的语法,您到底想要什么?这里没有jQuery。您使用的是下划线.js或lodash。请编辑问题以指定。在{date,completed}
你的意思是accomp
?编辑的im sorry下划线中有一个uxby.keyBy函数吗?它在下划线中被称为.indexBy
。names is Object cannot be。forEach下划线中有一个xby.keyBy函数吗?在下划线.js中被称为.indexBy
。names is Object not be.forEach