Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在对象数组中显式设置新属性_Javascript_Lodash - Fatal编程技术网

Javascript 如何在对象数组中显式设置新属性

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",

我有一个嵌套属性,我正试图找到一种干净的方法来替换它,而不需要使用一堆切片和拼接(目前我正在使用的是查找,我正在寻找一种有或没有lodash的更干净的解决方案)

仅更新
可复制\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的对象?