Javascript 添加到数组内部的数组
我有一个动态创建的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
[
{"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 ms与find()方法比较,后者需要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 ms与find()方法比较,后者需要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