如何在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