Javascript 添加到数组内部的数组

Javascript 添加到数组内部的数组,javascript,jquery,arrays,Javascript,Jquery,Arrays,我有一个动态创建的javascript对象,如下所示 [ {"user":"James","errors":["signature must be signed!"]}, {"user":"Jones","errors":["signature must be signed!"]} ] validationErr[validationErr.findIndex(e => e.user === 'James')].errors.push("value"); 我试图在该对象的err

我有一个动态创建的javascript对象,如下所示

[
  {"user":"James","errors":["signature must be signed!"]},
  {"user":"Jones","errors":["signature must be signed!"]}
]
validationErr[validationErr.findIndex(e => e.user === 'James')].errors.push("value");
我试图在该对象的
errors
数组中动态添加一个新错误

这就是我尝试过的:

validationErr.push({ "user" : "James", "errors" : ["start time musst be filled!"] });
但是我有一个新的条目

[
  {"user":"James","errors":["signature must be signed!"]},
  {"user":"Jones","errors":["signature must be signed!"]},
  {"user" : "James", "errors" : ["start time musst be filled!"]}
]
而不是这个

[
  {"user":"James","errors":["signature must be signed!", "start time musst be filled!"]},
  {"user":"Jones","errors":["signature must be signed!"]},
]

如何添加到对象内的现有数组?

您应该使用该特定键将其推入对象内

那么你的语法必须是

validationErr[0].errors.push("start time musst be filled!");

其中,
validationErr[0]
为您提供带有james的对象,并推送至其错误。

您应使用该特定键推送对象内部

那么你的语法必须是

validationErr[0].errors.push("start time musst be filled!");
其中,
validationErr[0]
向您提供与james的对象,并推导出他的错误。

ES6解决方案使用,以及

const data=[{user:“James”,错误:[“签名必须签名!”]},{user:“Jones”,错误:[“签名必须签名!”]};
函数加法器错误(用户名,错误){
const{errors}=data.find({user}=>user==username);
if(errors){errors.push(error)}
}
加法器(“詹姆斯”,“发生错误”);
console.log(数据)
ES6解决方案使用,以及

const data=[{user:“James”,错误:[“签名必须签名!”]},{user:“Jones”,错误:[“签名必须签名!”]};
函数加法器错误(用户名,错误){
const{errors}=data.find({user}=>user==username);
if(errors){errors.push(error)}
}
加法器(“詹姆斯”,“发生错误”);

log(data)
这有点难看,但假设您有唯一的用户,并且
错误
字段从未定义过,您就可以实现您想要的功能

函数函数(arr、idField、id、updField、upd){
arr.find(obj=>obj[idField]==id)[updField].push(upd);
}
validationErr=[
{“user”:“James”,“errors”:[“签名必须签名!”]},
{“用户”:“琼斯”,“错误”:[“必须签名!”]}
];
func(validationErr,“用户”,“James”,“错误”,“必须填写开始时间!”);

日志(validationErr)这有点难看,但假设您有唯一的用户,并且
错误
字段从未定义过,您就可以实现您想要的功能

函数函数(arr、idField、id、updField、upd){
arr.find(obj=>obj[idField]==id)[updField].push(upd);
}
validationErr=[
{“user”:“James”,“errors”:[“签名必须签名!”]},
{“用户”:“琼斯”,“错误”:[“必须签名!”]}
];
func(validationErr,“用户”,“James”,“错误”,“必须填写开始时间!”);

日志(validationErr)您可以使用迭代数组并找到正确的用户。然后推送错误并退出循环

如果找不到用户,将使用
errors
数组创建一个新对象

函数加法器错误(用户,错误){
if(!data.some)函数(a){
if(a.user==用户){
a、 错误。推送(错误);
返回true;
}
})) {
push({user:user,errors:[error]});
}
}
var data=[{user:“James”,错误:[“签名必须签名!”]},{user:“Jones”,错误:[“签名必须签名!”]};
加法器(“詹姆斯”,“开始时间不能填写!”);
附录(“foo”、“bar”);
控制台日志(数据)

.as console wrapper{max height:100%!important;top:0;}
您可以使用迭代数组并找到正确的用户。然后推送错误并退出循环

如果找不到用户,将使用
errors
数组创建一个新对象

函数加法器错误(用户,错误){
if(!data.some)函数(a){
if(a.user==用户){
a、 错误。推送(错误);
返回true;
}
})) {
push({user:user,errors:[error]});
}
}
var data=[{user:“James”,错误:[“签名必须签名!”]},{user:“Jones”,错误:[“签名必须签名!”]};
加法器(“詹姆斯”,“开始时间不能填写!”);
附录(“foo”、“bar”);
控制台日志(数据)

.as控制台包装{max height:100%!important;top:0;}
一种简单有效的方法是:

validationErr[validationErr.map((e)=>e.user).indexOf('James')].errors.push("value");
还是像这样

[
  {"user":"James","errors":["signature must be signed!"]},
  {"user":"Jones","errors":["signature must be signed!"]}
]
validationErr[validationErr.findIndex(e => e.user === 'James')].errors.push("value");
这需要0.03 msfind()方法比较,后者需要0.07 ms平均快200%

虽然,最快的方法是使用键值对,但您不能使用这种方法,因为您的对象是动态生成的
var ValidationErr={};
ValidationErr['James']=[];
ValidationErr['Robby']=[];
ValidationErr['James'].push(“未经验证”);
ValidationErr['James'].push(“错误凭证”);
ValidationErr['Robby'].push(“无错误”);

log(ValidationErr['James'])一种简单有效的方法是:

validationErr[validationErr.map((e)=>e.user).indexOf('James')].errors.push("value");
还是像这样

[
  {"user":"James","errors":["signature must be signed!"]},
  {"user":"Jones","errors":["signature must be signed!"]}
]
validationErr[validationErr.findIndex(e => e.user === 'James')].errors.push("value");
这需要0.03 msfind()方法比较,后者需要0.07 ms平均快200%

虽然,最快的方法是使用键值对,但您不能使用这种方法,因为您的对象是动态生成的
var ValidationErr={};
ValidationErr['James']=[];
ValidationErr['Robby']=[];
ValidationErr['James'].push(“未经验证”);
ValidationErr['James'].push(“错误凭证”);
ValidationErr['Robby'].push(“无错误”);

log(ValidationErr['James'])嗯,它是动态创建的,所以我认为这不是一个好的解决方案,因为您的解决方案是硬编码的!嗯,它是动态创建的,所以我认为这不是一个好的解决方案,因为您的解决方案是硬编码的@lewis4u是的,如果user==James是唯一的,则过滤后数组中会有一个,因此需要使用该选择器获取它。如果我的对象是动态创建的,该怎么办?@lewis4u您仍然可以将字段作为参数传递,但如果过滤条件总是产生一个结果,则零将保持不变。将我的答案更新为具有参数化字段selects@lewis4u为什么你认为这是最好的答案?它迭代整个数组,即使第一个元素是您想要的元素。使用
some
fi