Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.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_Arrays - Fatal编程技术网

Javascript 从对象数组中删除对象

Javascript 从对象数组中删除对象,javascript,arrays,Javascript,Arrays,我有一个对象数组: [{"value":"14","label":"7"},{"value":"14","label":"7"},{"value":"18","label":"7"}] 如何删除此项{“value”:“14”,“label”:“7”}生成新数组: [{"value":"14","label":"7"},{"value":"18","label":"7"}] ?试试: var ar = [{"value":"14","label":"7"},{"value":"14","la

我有一个对象数组:

[{"value":"14","label":"7"},{"value":"14","label":"7"},{"value":"18","label":"7"}]
如何删除此项
{“value”:“14”,“label”:“7”}
生成新数组:

 [{"value":"14","label":"7"},{"value":"18","label":"7"}]

试试:

var ar = [{"value":"14","label":"7"},{"value":"14","label":"7"},{"value":"18","label":"7"}];

for(var i=0; i < ar.length; i++) {
   if(ar[i].value == "14" && ar[i].label == "7")
   {
      ar.splice(i,1);
   }
}
var ar=[{“值”:“14”,“标签”:“7”},{“值”:“14”,“标签”:“7”},{“值”:“18”,“标签”:“7”}];
对于(变量i=0;i

我将创建一个新阵列

var original = [{"value":"14","label":"7"},{"value":"14","label":"7"},{"value":"18","label":"7"}]

var result = [];

for (var i = 0, l = original.length; i < l; i++) { // Traverse the whole array
  var current = original[i];
  if (! (current.value == 14 && current.label == 7) ) {
    // It doesn't match the criteria, so add it to result
    result.push( current );
  }
}
拼接

original.splice(0,1); // Remove one element from index 0.

您需要保留重复的对象吗

带下划线的

var oldarray = [{"value":"14","label":"7"},{"value":"14","label":"7"},{"value":"18","label":"7"}]
var newarray = _.reject(oldarray, function(o) { 
  return o == {"value":"14","label":"7"}; 
});
在ES6(或使用)中,您可以使用:

或者,如果阵列的副本正常(并且从ES5开始可用),那么应该这样做:

var withoutEl = arr.filter(function (el) { return !matchesEl(el); });

这是一种不用“创建新阵列”或使用外部库即可完成此任务的方法。请注意,这将只删除找到的第一个实例,而不是重复的实例,如您的问题示例中所述

// Array to search
var arr = [{"value":"14","label":"7"},{"value":"14","label":"7"},{"value":"18","label":"7"}];

// Object to remove from arr
var remove = {"value":"14","label":"7"};

// Function to determine if two objects are equal by comparing
// their value and label properties
var isEqual = function(o1, o2) {
    return o1 === o2 || 
        (o1 != null && o2 != null && 
         o1.value === o2.value &&
         o1.label === o2.label);
};

// Iterate through array and determine if remove is in arr
var found = false;
var i;
for(i = 0; i < arr.length; ++i) {
    if(isEqual(arr[i], remove)) {
        found = true;
        break;
    }
}

if(found) {
    // Found remove in arr, remove it
    arr.splice(i, 1);
}
//要搜索的数组
var arr=[{“value”:“14”,“label”:“7”},{“value”:“14”,“label”:“7”},{“value”:“18”,“label”:“7”}];
//要从arr中删除的对象
var remove={“value”:“14”,“label”:“7”};
//函数通过比较确定两个对象是否相等
//它们的值和标签属性
var isEqual=函数(o1,o2){
返回值o1==o2 | |
(o1!=null&&o2!=null&&
o1.value==o2.value&&
o1.标签===o2.标签);
};
//遍历数组并确定remove是否在arr中
var=false;
var i;
对于(i=0;i

具有标识的解决方案 如果您具有对象标识,而不仅仅是对象相等(即,您试图从数组中删除特定对象,而不仅仅是包含与现有对象相同数据的对象),则只需使用splice和indexOf即可:

a = {x:1}
b = {x:2}
arr = [a,b]
假设您要删除b:

arr.splice(
  arr.indexOf(b), 1
);
平等解决 这个问题使我们不清楚我们是在处理身份还是平等问题。如果具有相等性(两个包含相同内容的对象,它们看起来相同,但实际上不是同一个对象),则需要一个比较函数,我们可以将其传递给findIndex

a = {x: 1};
b = {x: 2};
arr = [a, b];
现在我们要删除c,它等于,但与a不同:

c = {x: 1}

index = arr.findIndex(
  (i) => i.x === c.x
)

if (index !== -1) {
  arr.splice(
    index, 1
  );
}    
注意,我在这里传递一个ES6风格的lambda函数作为findIndex的第一个参数

除非您有只为evergreen浏览器编写的特权,否则您可能希望使用像Babel这样的transpiler来使用此解决方案

具有不变性的解 如果您关心不变性,并且希望返回一个新数组,则可以使用筛选器:

a = {x: 1};
b = {x: 2};
arr = [a, b];
让我们保留所有不属于:

newArr = arr.filter((x) => x != a)
使用ES6方法:

const objIndex = objs.findIndex(o => o.value === '14' && o.label === '7')

if(objIndex > -1) {
  objs.slice(objIndex, 1)
}

然后
removeDuplicateObject(你的数组)

如果你不想改变你的数组,只需使用过滤方法,
array.prototype.filter()


array.filter((i)=>i!=“b”)

,但这将在数组中创建空值(即未定义的值)。i、 e.
[undefined,undefined,{…}]
。可能您忘记了i--在拼接之后。您是否尝试删除重复项?您需要更具体地说明用于确定是否应删除项的标准。如果您要删除重复对象,请参阅此线程:您的比较将始终为
false
(没有对象是另一个对象。)findIndex ftw!但是我认为你在切片上添加了
拼接
,“原始数组不会被修改。”。这个应该是最好的。现在这是一个答案。a+
newArr = arr.filter((x) => x != a)
const objIndex = objs.findIndex(o => o.value === '14' && o.label === '7')

if(objIndex > -1) {
  objs.slice(objIndex, 1)
}
function removeDuplicateObject (arr) {
  let temp = arr.map((item) => {
    return JSON.stringify(item);
  });
  temp = Array.from(new Set(temp));
  return temp.map((item) => {
    return JSON.parse(item);
  });
}