![](/img/trans.png)
[英]How to remove an object from an array based on another array with Lodash?
[英]Remove object from array based from another array
这是我的第一个数组的结构:
var myArray = [1,Firstname,Lastname];
我的第二个数组由具有属性的对象组成:
var mySecondArray = [object, object, object];
当您展开它时,在第一个数组对象上将显示如下内容:
Id = 1
FirstName = Test
LastName = TestLastName
我需要从第一个数组中删除具有相同id
的对象。 我尝试使用此方法,但没有运气:
// if condition
myArray.splice(mySecondArray[x].ID, 1);
任何想法?
编辑
这就是整个想法。 我有所有项目(对象)的数组,并且有无效项目的数组(在这种情况下,这是字符串数组)
var originalLength = validRowsArray.length;
for (var x = 0; x < invalidRowsArray.length; x++) {
for (var y = 0; y < originalLength; y++) {
if (validRowsArray[x].ID != invalidRowsArray[y][0]) { // 0 is the position of ID
validRowsArray.splice(validRowsArray[x], 1);
}
}
}
您正在使用第二个数组中对象的属性作为要拼接的对象的参数:
myArray.splice(mySecondArray[x].ID, 1);
但是您应该传递给splice
的第一个参数是要在其包含数组中删除的对象的索引 。
在伪代码中,您的算法应执行以下操作:
for each item in array_a
look for a match in array b
determine the index of the matching object in array b
splice one item at that index from array b
myArray.splice(mySecondArray[x].ID, 1);
可以是任何值,并且与splice()
所需的数组索引无关
假设您知道索引,并且它是x
只需使用
myArray.splice(x, 1);
目前尚不清楚您如何定义x
我认为您可以使用一个接头,导致2个数组,是一个对象和一个数组,所以,在这里您可以找到答案,但是当不包括数组时,只需在最后添加它,否则只需替换rigth?这个:
var myArray = [1,Firstname,Lastname]; //array user*
var mySecondArray = [object, object, object]; //array with objects(user)
Array.prototype.insertArray = function ( myArray ){
var addMyArray = true;
for(var i=0; i<this.length; i++){
//compare 2 Id's
if(this[i].Id == myArray[0]){ //if equals -> replace
this[i].FirstName = myArray[1];
this[i].LastName = myArray[2];
addMyArray = false;
}
}
//in case you array is not in your 'secondarray' it should be added right?
if(addMyArray){
this.push( {Id:myArray[0], FirstName:myArray[1], LastName:myArray[2]} );
}
}
//Note: call your function after write prototype always
mySecondArray.insertArray( myArray );
//check right answer :)
console.log(mySecondArray)
使用反向for
循环可确保删除时不会错过任何元素。
然后使用some
命令检查当前元素是否存在于无效数组中。
使用索引作为第一个参数进行拼接 ,然后将其作为第二个参数。
var invalidRowsArray = [ [2, 'foo2', 'bar2'] ]; var validRowsArray = [{ Id: 1, FirstName: 'foo', LastName: 'bar' }, { Id: 2, FirstName: 'foo2', LastName: 'bar2' }, { Id: 3, FirstName: 'foo3', LastName: 'bar3' }]; for (var i = validRowsArray.length; i--;) { var exist = invalidRowsArray.some(function(element) { return element[0] == validRowsArray[i].Id; }) if (exist) validRowsArray.splice(i, 1) } console.log(validRowsArray);
如您所说,“如果第一个数组具有相同的ID,则需要删除该对象”,第一个数组不应该仅由数字组成吗? 无论如何,如果您想从第二个数组中删除对象并拥有索引,则可以通过这种方式进行操作,
delete mySecondArray[x]
作为myarray [x] == mySecondArray [x] .Id 工作提琴
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.