使用 JavaScript 从数组中删除对象 [英] Remove Object from Array using JavaScript

查看:68
本文介绍了使用 JavaScript 从数组中删除对象的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何从数组中删除对象?我希望从 someArray 中删除包含名称 Kristian 的对象.例如:

someArray = [{name:Kristian", lines:2,5,10"},{名称:约翰",行:1,19,26,96"}];

我想实现:

someArray = [{name:John", lines:1,19,26,96"}];

解决方案

您可以使用多种方法从数组中删除项目:

//1someArray.shift();//移除第一个元素//2someArray = someArray.slice(1);//移除第一个元素//3someArray.splice(0, 1);//移除第一个元素//4someArray.pop();//删除最后一个元素//5someArray = someArray.slice(0, someArray.length - 1);//删除最后一个元素//6someArray.length = someArray.length - 1;//删除最后一个元素

如果要删除位置 x 处的元素,请使用:

someArray.splice(x, 1);

someArray = someArray.slice(0, x).concat(someArray.slice(-x));

回复@chill182的评论:可以使用Array从数组中删除一个或多个元素.filterArray.spliceArray.findIndex 结合(参见 MDN),例如

//非破坏性过滤器 >noJohn = John 被移除,但 someArray 不会改变让 someArray = getArray();让 noJohn = someArray.filter( el => el.name !== "John" );log(`let noJohn = someArray.filter( el => el.name !== "John")`,`非破坏性过滤器[noJohn] =`,格式(noJohn));log(`**someArray.length ${someArray.length}`);//破坏性过滤器/重新分配 John 已删除 >someArray2 =让 someArray2 = getArray();someArray2 = someArray2.filter( el => el.name !== "John" );日志("",`someArray2 = someArray2.filter( el => el.name !== "John" )`,`破坏性过滤器/重新分配约翰删除了[someArray2] =`,格式(someArray2));log(`**someArray2.length 过滤器 ${someArray2.length}`);//破坏性拼接/w findIndex Brian 仍然存在 >someArray3 =让 someArray3 = getArray();someArray3.splice(someArray3.findIndex(v => v.name === "Kristian"), 1);someArray3.splice(someArray3.findIndex(v => v.name === "John"), 1);日志("",`someArray3.splice(someArray3.findIndex(v => v.name === "Kristian"), 1),`,`破坏性拼接/w findIndex Brian 仍然是 [someArray3] =`,格式(someArray3));log(`**someArray3.length 拼接后 ${someArray3.length}`);//如果您不确定数组的内容,//你应该先检查findIndex的结果让 someArray4 = getArray();const indx = someArray4.findIndex(v => v.name === "Michael");someArray4.splice(indx, indx >= 0 ? 1 : 0);log("", `someArray4.splice(indx, indx >= 0 ? 1 : 0)`,`先检查 findIndex 结果 [someArray4] = (没有删除)`,格式(someArray4));log(`**someArray4.length (应该还是3) ${someArray4.length}`);//-- 助手 --函数格式(对象){返回 JSON.stringify(obj, null, " ");}功能日志(...txt){document.querySelector("pre").textContent += `${txt.join("\n")}\n`}函数 getArray() {返回 [ {name: "Kristian", lines: "2,5,10"},{名称:约翰",行:1,19,26,96"},{名称:布莱恩",行:3,9,62,36"}];}

**结果**

How can I remove an object from an array? I wish to remove the object that includes name Kristian from someArray. For example:

someArray = [{name:"Kristian", lines:"2,5,10"},
             {name:"John", lines:"1,19,26,96"}];

I want to achieve:

someArray = [{name:"John", lines:"1,19,26,96"}];

解决方案

You can use several methods to remove item(s) from an Array:

//1
someArray.shift(); // first element removed
//2
someArray = someArray.slice(1); // first element removed
//3
someArray.splice(0, 1); // first element removed
//4
someArray.pop(); // last element removed
//5
someArray = someArray.slice(0, someArray.length - 1); // last element removed
//6
someArray.length = someArray.length - 1; // last element removed

If you want to remove element at position x, use:

someArray.splice(x, 1);

Or

someArray = someArray.slice(0, x).concat(someArray.slice(-x));

Reply to the comment of @chill182: you can remove one or more elements from an array using Array.filter, or Array.splice combined with Array.findIndex (see MDN), e.g.

// non destructive filter > noJohn = John removed, but someArray will not change
let someArray = getArray();
let noJohn = someArray.filter( el => el.name !== "John" ); 
log(`let noJohn = someArray.filter( el => el.name !== "John")`,
  `non destructive filter [noJohn] =`, format(noJohn));
log(`**someArray.length ${someArray.length}`);

// destructive filter/reassign John removed > someArray2 =
let someArray2 = getArray();
someArray2 = someArray2.filter( el => el.name !== "John" );
log("", 
  `someArray2 = someArray2.filter( el => el.name !== "John" )`,
  `destructive filter/reassign John removed [someArray2] =`, 
  format(someArray2));
log(`**someArray2.length after filter ${someArray2.length}`);

// destructive splice /w findIndex Brian remains > someArray3 =
let someArray3 = getArray();
someArray3.splice(someArray3.findIndex(v => v.name === "Kristian"), 1);
someArray3.splice(someArray3.findIndex(v => v.name === "John"), 1);
log("",
  `someArray3.splice(someArray3.findIndex(v => v.name === "Kristian"), 1),`,
  `destructive splice /w findIndex Brian remains [someArray3] =`, 
  format(someArray3));
log(`**someArray3.length after splice ${someArray3.length}`);

// if you're not sure about the contents of your array, 
// you should check the results of findIndex first
let someArray4 = getArray();
const indx = someArray4.findIndex(v => v.name === "Michael");
someArray4.splice(indx, indx >= 0 ? 1 : 0);
log("", `someArray4.splice(indx, indx >= 0 ? 1 : 0)`,
  `check findIndex result first [someArray4] = (nothing is removed)`,
  format(someArray4));
log(`**someArray4.length (should still be 3) ${someArray4.length}`);

// -- helpers -- 
function format(obj) {
  return JSON.stringify(obj, null, " ");
}

function log(...txt) {
  document.querySelector("pre").textContent += `${txt.join("\n")}\n`
}

function getArray() {
  return [ {name: "Kristian", lines: "2,5,10"},
           {name: "John", lines: "1,19,26,96"},
           {name: "Brian", lines: "3,9,62,36"} ];
}

<pre>
**Results**

</pre>

这篇关于使用 JavaScript 从数组中删除对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆