Javascript 如何在对象数组中显式设置新属性
我有一个嵌套属性,我正试图找到一种干净的方法来替换它,而不需要使用一堆切片和拼接(目前我正在使用的是查找,我正在寻找一种有或没有lodash的更干净的解决方案) 仅更新Javascript 如何在对象数组中显式设置新属性,javascript,lodash,Javascript,Lodash,我有一个嵌套属性,我正试图找到一种干净的方法来替换它,而不需要使用一堆切片和拼接(目前我正在使用的是查找,我正在寻找一种有或没有lodash的更干净的解决方案) 仅更新可复制\u计数器:0以在内部变为可复制\u计数器:1 id:0和url.id 85 data = [{ id: 0, groupID: "65da6a", urls: [{ id: 85, searchedurl: "https://www.yahoo.com",
可复制\u计数器:0
以在内部变为可复制\u计数器:1
id:0
和url.id 85
data = [{
id: 0,
groupID: "65da6a",
urls: [{
id: 85,
searchedurl: "https://www.yahoo.com",
errorurl: "https://www.yahoo.com/error505",
count: 1,
reproducible: false,
reproducible_counter: 0
},
{
id: 84,
searchedurl: "https://www.gmail.com",
errorurl: "https://www.gmail.com/error404",
count: 1,
reproducible: false,
reproducible_counter: 0
}
]
},
{
id: 1
groupID: "d4127e",
urls: [{
id: 3,
searchedurl: "agwscc",
errorurl: "xyqa",
count: 1,
reproducible: false,
reproducible_counter: 0,
resolved: null
}]
}
];
这里有一个解决方案
for(var index=0; index< data.length; index++){
data[index].urls.filter(u => u.id === 85)[0].reproducible_counter++;
}
for(var index=0;indexu.id==85)[0]。可复制的_计数器++;
}
我没有比这更简单的了。我们必须先匹配外部id,然后匹配内部id。如果我答错了,很抱歉。假设id是唯一的
data.some(outer => {
if (outer.id === 0) {
outer.urls.some(inner => {
if (inner.id === 85) {
inner.reproducible_counter = 1;
return true;
}
return false;
});
return true;
}
return false;
});
“干净”是主观的,但假设ID是唯一的,一种可能的lodash解决方案是:
_.chain(data).find({id: 0}).get('urls').find({id: 85}).assign({reproducible_counter: 1}).value();
例如:
数据=[
{
id:0,
groupID:“65da6a”,
网址:[
{
身份证号码:85,
搜索URL:“https://www.yahoo.com",
错误URL:“https://www.yahoo.com/error505",
计数:1,
可复制:错误,
可复制计数器:0
},
{
id:84,
搜索URL:“https://www.gmail.com",
错误URL:“https://www.gmail.com/error404",
计数:1,
可复制:错误,
可复制计数器:0
}
]
},
{
id:0,
groupID:“d4127e”,
网址:[
{
身份证号码:85,
searchedurl:“agwscc”,
错误URL:“xyqa”,
计数:1,
可复制:错误,
可复制的_计数器:0,
已解决:空
}
]
}
];
//目标:仅更新id:0和URL.id.85内的可复制_计数器:0,使其成为可复制_计数器:1
_.chain(data).find({id:0}).get('url').find({id:85}).assign({repeatable_counter:1}).value();
document.getElementById('result').innerText=JSON.stringify(数据,null,4)代码>
带ES6链的:
var data=[{id:0,groupID:“65da6a”,url:[{id:85,searchedrl:”https://www.yahoo.com,错误URL:https://www.yahoo.com/error505,计数:1,可复制:false,可复制\u计数器:0},{id:84,searchedurl:https://www.gmail.com,错误URL:https://www.gmail.com/error404",计数:1,可复制:false,可复制_计数器:0}]},{id:1,groupID:“d4127e”,URL:[{id:3,searchedurl:“agwscc”,errorurl:“xyqa”,计数:1,可复制:false,可复制_计数器:0,解析:null}]];
var结果=数据
.find(({id})=>id==0)
.URL
.find(({id})=>id==85)
.可复制的计数器=1
console.log(数据[0].URL[0].可复制的\u计数器)
寻找更干净的解决方案
你能发布你当前的代码吗?你有两个id
s,一个在外部对象,一个在内部对象(内部url
),你指的是哪两个?仅仅是一个id为85的对象?