所以我在这里有一个对象称为计算作业,
{
'a': [{'_id': '1'}, {'_id': '2'}, {'_id': '3'} ],
'b': [{'_id': '4'}]
}
我想做的是,尝试删除'_id'为'1'的对象。
所以我最初的想法是,遍历它,然后当我找到该项目时,将其分解并删除该项目。这是我写的,
var res;
for (var key in this.computedJobs) {
for(var i=0; i<this.computedJobs[key].length; i++) {
console.log(this.computedJobs[key])
if (this.computedJobs[key][i]._id === '1') {
res = this.computedJobs[key][i]
break
}
}
}
但是res
是未定义的。
另一方面,我尝试过
var res;
for (var key in this.computedJobs) {
this.computedJobs[key].forEach(j => {
if (j._id === '1') {
res = j
break
}
})
}
但是出现错误Syntax Error: Unsyntactic break
。谁能告诉我我在做什么错?
答案 0 :(得分:0)
只需找到对象的索引并拼接数组即可。
var index = this.computedJobs[key].findIndex(j => j._id === '1');
if ( index >= 0 ) {
this.computeJobs.splice(index, 1);
}
答案 1 :(得分:0)
如果您知道您最多具有1个匹配的“对象”,则可以使用数组中的Array#some和splice
对象
var data = {
'a': [{'_id': '1'}, {'_id': '2'}, {'_id': '3'} ],
'b': [{'_id': '4'}]
};
Object.values(data).some(v => v.some(({_id}, index, array) => {
console.log(_id);
if (_id === '1') {
return array.splice(index, 1);
return true;
}
}));
console.log(data);
通过使用Array#some,一旦回调中返回了真实值,迭代就会立即停止-您可以看到,唯一要测试的对象就是您要删除的对象-快速高效,没有不必要的迭代>
让我们看看如果删除ID 5会发生什么情况
var data = {
'a': [{'_id': '1'}, {'_id': '2'}, {'_id': '3'} ],
'b': [{'_id': '4'}, {'_id': '5'}, {'_id': '6'}]
};
Object.values(data).some(v => v.some(({_id}, index, array) => {
console.log(_id);
if (_id === '5') {
return array.splice(index, 1);
return true;
}
}));
console.log(data);
下面的代码可能不是您所需要的-但以防万一
如果可以有多个具有相同ID的对象,那就复杂了
我使用reduceRight
作为从头到尾从功能上遍历整个数组的便捷方法,因为如果您要对数组进行变异,那就是您要这样做的方式
var data = {
'a': [{'_id': '1'}, {'_id': '2'}, {'_id': '3'} ],
'b': [{'_id': '4'}]
};
Object.values(data).forEach(v => v.reduceRight((_, {_id}, index, array) => {
if (_id === '1') {
array.splice(index, 1);
}
}, null));
console.log(data);
答案 2 :(得分:0)
我尝试了您的代码,并进行了最少的更改:
let objToDelete = {
'a': [{'_id': '1'}, {'_id': '2'}, {'_id': '3'} ],
'b': [{'_id': '4'}]
};
var res = {};
for (var key in objToDelete) {
for(var i=0; i<objToDelete[key].length; i++) {
if (objToDelete[key][i]._id === '1') {
res = objToDelete[key][i];
break;
}
}
}
if(Object.keys(res).length && res.hasOwnProperty('_id')){
console.log('Yes we got the element!');
}
else{
console.log('Object not found!');
}
console.log(res)
它正在工作。
答案 3 :(得分:0)
请尝试以下操作:
const jsonObj = {
'a': [{'_id': '1'}, {'_id': '2'}, {'_id': '3'} ],
'b': [{'_id': '4'}]
};
let result;
const keys = Object.keys(jsonObj);
keys.forEach(k => {
const obj = jsonObj[k].find(o => o._id === '1');
if (obj) return result = obj;
});
console.log('Result: ', result);