ลบ Object จาก Array โดยใช้ JavaScript


548

ฉันจะลบวัตถุออกจากอาร์เรย์ได้อย่างไร ฉันต้องการที่จะลบวัตถุที่มีชื่อจากKristian someArrayตัวอย่างเช่น:

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

ฉันต้องการบรรลุ:

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


3
FYI ฉันได้ย้อนกลับการแก้ไขในคำถามนี้ดังนั้นไวยากรณ์ของอาเรย์จึงผิดอีกครั้งและคำตอบทั้งหมดเหล่านี้อยู่ในบริบท
Dunhamzzz

2
จากนั้นไวยากรณ์ของอาเรย์ถูก "แก้ไข" (สองครั้ง) อีกครั้งเพื่อให้คำตอบไม่ได้อยู่ในบริบทอีกต่อไป
Teepeemm

4
ข้อผิดพลาดทางไวยากรณ์ช่วยทำให้คำตอบบางอย่างสมเหตุสมผลได้อย่างไร
Samy Bencherif

1
@SamyBencherif - คำตอบบางคำตอบระบุข้อผิดพลาดทางไวยากรณ์ในเวอร์ชันดั้งเดิมของคำถามอย่างชัดเจนดังนั้นหากคุณลบข้อผิดพลาดทางไวยากรณ์นั้นคำตอบเหล่านั้นกำลังพูดถึงบางสิ่งที่ไม่มีอยู่
nnnnnn

คำตอบ:


778

คุณสามารถใช้หลายวิธีในการลบรายการออกจาก 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, a.length - 1); // last element removed
//6
someArray.length = someArray.length - 1; // last element removed

หากคุณต้องการลบองค์ประกอบที่ตำแหน่งxให้ใช้:

someArray.splice(x, 1);

หรือ

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

ตอบกลับความคิดเห็นของ@ chill182 : คุณสามารถลบองค์ประกอบหนึ่งรายการหรือมากกว่าจากอาร์เรย์ที่ใช้Array.filterหรือArray.spliceรวมกับArray.findIndex(ดูMDN ) เช่น

// non destructive filter > noJohn = John removed, but someArray will not change
let someArray = getArray();
let noJohn = someArray.filter( el => el.name !== "John" ); 
log("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("", "destructive filter/reassign John removed > someArray2 =", 
  format(someArray2));
log(`**someArray2.length ${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("", "destructive splice /w findIndex Brian remains > someArray3 =", 
  format(someArray3));
log(`**someArray3.length ${someArray3.length}`);

// Note: 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("", "check findIndex result first > someArray4 (nothing is removed) > ",
  format(someArray4));
log(`**someArray4.length (should still be 3) ${someArray4.length}`);

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>


2
@Klemzy คุณไม่ได้หมายความว่าไม่ใช้ดัชนีใช่หรือไม่ ตามมูลค่า ...
Royi Namir

328
คำถามเดิมถามว่าจะเอาวัตถุที่มีชื่อ = "Kristian" ออกจากอาร์เรย์ได้อย่างไร คำตอบของคุณถือว่าเป็นรายการแรกในอาร์เรย์ แต่ถ้า Kristin ไม่ได้อยู่ในรายการแรก จากนั้นคำตอบของคุณไม่ทำงาน
Rochelle C

7
@ chill182: มันไม่ใช่คำตอบที่เฉพาะเจาะจง แต่เป็นคำตอบทั่วไป จากนั้นคุณควรจะสามารถสรุปวิธีการลบองค์ประกอบ หากคุณต้องการลบองค์ประกอบที่ตำแหน่ง x ... อาจเป็นคำแนะนำสำหรับการลบองค์ประกอบอื่นนอกเหนือจากองค์ประกอบแรกใช่ไหม
KooiInc

6
ฟังก์ชั่น Splice มีประโยชน์กับฉัน แต่คุณไม่ควรกำหนด someArray อีก สิ่งนี้จะส่งผลใน someArray ที่มีรายการที่ถูกลบแทนที่จะเป็นรายการที่มีอาร์เรย์ผลลัพธ์ที่มีรายการที่ถูกลบ
Kenn Cal

1
คุณควรตรวจสอบผลก่อนที่จะใช้ในfindIndex spliceหากไม่มีองค์ประกอบใดในอาเรย์ที่ตรงกับเงื่อนไขfindIndexจะส่งคืน-1และวางสิ่งนี้ลงในspliceนั้นโดยตรงจะส่งผลให้มีการลบองค์ประกอบสุดท้ายในอาเรย์โดยพลการ
jdnz

131

ฉันขอแนะนำให้ใช้ lodash.js หรือsugar.jsสำหรับงานทั่วไปเช่นนี้:

// lodash.js
someArray = _.reject(someArray, function(el) { return el.Name === "Kristian"; });

// sugar.js
someArray.remove(function(el) { return el.Name === "Kristian"; });

ในโครงการส่วนใหญ่การมีชุดวิธีการช่วยเหลือที่จัดเตรียมโดยไลบรารีเช่นนี้ค่อนข้างมีประโยชน์


13
ฉันคิดว่าตัวอย่างขีดเส้นใต้ปิดเล็กน้อย ควรเป็นsomeArray = _.reject(someArray, function(el) { return el.Name === "Kristian"; });
Andy Ford

7
หากคุณไม่ต้องการใช้ underscore.js หรือ sugar.js คุณสามารถทำได้someArray = someArray.filter(function(e) { return e.Name !== "Kristian"; });
BenR

1
สิ่งอื่นที่ฉันต้องการจะมีปุ่มแยกต่างหากสำหรับทุกวัตถุในอาร์เรย์ ถ้าฉันต้องการลบวัตถุนั้นในปุ่มอาร์เรย์คลิก ทำอย่างไร . ฉันใช้ angular js ng-repeat เพื่อสร้างรายการ คุณช่วยฉันได้ไหม
Thilak Raj

5
จะไปต่อต้านข้าวที่นี่; การแนะนำให้รวมไลบรารีทั้งหมดเพื่อจุดประสงค์ในการลบรายการออกจากวัตถุ (ซึ่ง js สนับสนุนอย่างหมดจดนอกกรอบเนื่องจากคำตอบที่ยอมรับแสดง) เป็นรูปแบบที่ไม่ดี มันเพิ่มน้ำหนักและความซับซ้อนที่ไม่จำเป็นให้กับโค้ดของคุณเว้นแต่ว่าคุณต้องการมันสำหรับการทำงานที่ทรงพลังกว่าที่ห้องสมุดมีให้
Josh Doebbert

4
สำหรับการดำเนินการอย่างง่ายฉันจะไม่แนะนำให้รวมไลบรารี
Munna Bhakta

130

วิธีแก้ปัญหาที่สะอาดจะใช้Array.filter:

var filtered = someArray.filter(function(el) { return el.Name != "Kristian"; }); 

ปัญหาเกี่ยวกับสิ่งนี้คือมัน ไม่ทำงานบน IE <9 อย่างไรก็ตามคุณสามารถรวมรหัสจากไลบรารี Javascript (เช่นunderscore.js ) ที่ใช้สิ่งนี้กับเบราว์เซอร์ใด ๆ


10
อย่างไรก็ตามสิ่งนี้จะลบเหตุการณ์ที่พบทั้งหมดไม่เพียง แต่เหตุการณ์แรก
Flavien Volken

4
และมันจะคืนอาเรย์ใหม่แทนการแก้ไขอาเรย์ดั้งเดิม ขึ้นอยู่กับกรณีการใช้งานซึ่งอาจเป็นหรือไม่เป็นสิ่งที่คุณต้องการ
Jochie Nabuurs

1
@JochieNabuurs เป็นอาร์เรย์ใหม่จริงๆ อย่างไรก็ตามวัตถุยังคงเหมือนเดิม คุณยังคงสามารถปรับเปลี่ยนค่าของแต่ละวัตถุและมันจะสะท้อนให้เห็นถึงวัตถุของอาร์เรย์เดิม
DriLLFreAK100

2
เมื่อถึงจุดนี้การส่งคืนอาร์เรย์ใหม่เพียงแค่เปลี่ยนวิธีแก้ปัญหาเป็นsomeArray = someArray.filter(function(el) { return el.Name != "Kristian"; }); ที่อยู่นั้นไม่ใช่หรือ?
hBrent

93

แล้วเรื่องนี้ล่ะ

$.each(someArray, function(i){
    if(someArray[i].name === 'Kristian') {
        someArray.splice(i,1);
        return false;
    }
});

8
จะไม่ทำให้เกิดข้อผิดพลาดเพราะ$.each()แคชความยาวของอาร์เรย์ก่อนที่จะวนลูปดังนั้นหากคุณลบองค์ประกอบ$.each()จะทำงานผ่านจุดสิ้นสุดของอาร์เรย์ (ตอนนี้สั้นลง) (ดังนั้นsomeArray[i]จะเป็นundefinedและundefined.nameจะขัดข้อง)
nnnnnn

5
จากนั้นเพิ่ม 'return false' หลังจากต่อ
Allan Taylor

18
นี่ไม่ใช่จาวาสคริปต์ -1
onionpsy

20
โปรดทราบว่าคำตอบนี้ต้องใช้ jQuery
Clarkey

68

"array" ของคุณตามที่แสดงเป็นไวยากรณ์ JavaScript ที่ไม่ถูกต้อง วงเล็บปีกกา{}สำหรับวัตถุที่มีชื่อคุณสมบัติ / คู่ค่า แต่วงเล็บเหลี่ยม[]ใช้สำหรับอาร์เรย์ - ดังนี้:

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

ในกรณีนี้คุณสามารถใช้.splice()วิธีการลบรายการ หากต้องการลบรายการแรก (ดัชนี 0) ให้พูดว่า:

someArray.splice(0,1);

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

หากคุณไม่รู้จักดัชนี แต่ต้องการค้นหาในอาร์เรย์เพื่อค้นหารายการที่มีชื่อ "Kristian" เพื่อลบคุณสามารถทำได้:

for (var i =0; i < someArray.length; i++)
   if (someArray[i].name === "Kristian") {
      someArray.splice(i,1);
      break;
   }

แก้ไข: ฉันเพิ่งสังเกตเห็นว่าคำถามของคุณถูกแท็กด้วย "jQuery" ดังนั้นคุณสามารถลองใช้$.grep()วิธีการ :

someArray = $.grep(someArray,
                   function(o,i) { return o.name === "Kristian"; },
                   true);

ทำไมพวกเขาเพิ่มเกินพิกัด? แน่นอนคุณสามารถใส่ได้! = "Kristian" โอเวอร์โหลดใช้เพื่ออะไร
markthewizard1234

@ markthewizard1234 - คุณหมายถึงอาร์กิวเมนต์ "invert" Boolean $.grep()หรือไม่? มันไม่ได้เพิ่มอะไรมากในตัวอย่างนี้ที่ใช่ฉันใส่ได้!=แต่ในกรณีอื่น ๆ คุณอาจมีฟังก์ชั่นที่กำหนดไว้ซึ่งทำแบบทดสอบตรงข้ามกับสิ่งที่คุณต้องการ grep ดังนั้นแทนที่จะกำหนด ฟังก์ชั่นเพิ่มเติมที่คุณสามารถใช้เกินพิกัดนั้นเพื่อกลับผลลัพธ์
nnnnnn

อาดังนั้นถ้าคุณมีฟังก์ชั่น wrapper ที่มี grep คุณสามารถตั้งค่าบูลีนเป็นพารามิเตอร์ เข้าใจแล้ว!
markthewizard1234

@ markthewizard1234 - คุณสามารถ แต่นั่นไม่ใช่สิ่งที่ฉันมีในใจ: function isEven(num) { return num%2===0 }คิดว่าคุณมี คุณสามารถใช้$.grep(someArray, isEven)เพื่อรับตัวเลขคู่จากอาเรย์หรือ$.grep(someArray, isEven, true)ทำตรงกันข้ามและรับค่าที่ไม่สม่ำเสมอ
nnnnnn

63

ES2015

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

someArray = someArray.filter(person => person.name != 'John');

มันจะลบJohn !


4
มาจากจาวาฉันสับสนอย่างมากว่าสิ่งพื้นฐานที่ต้องทำคือต้องมีการกรองรายการ ... wtf นี่เป็นคำตอบที่ถูกต้องที่สุดสำหรับคำถาม OPs ที่ฉันอ่านมา
codepleb

ใช่นี่เป็นวิธีการที่ดี แม้ว่ามันจะทำงานก่อน ES2015 (ES6) ฟังก์ชันตัวกรองมีให้ใช้งานตั้งแต่รุ่น 5.1 (2011) ecma-international.org/ecma-262/5.1/#sec-15.4.4.20
3777549

40

คุณสามารถใช้ array.filter ()

เช่น

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

        someArray = someArray.filter(function(returnableObjects){
               return returnableObjects.name !== 'Kristian';
        });

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

ฟังก์ชั่นลูกศร:

someArray = someArray.filter(x => x.name !== 'Kristian')

สิ่งอื่นที่ฉันต้องการจะมีปุ่มแยกต่างหากสำหรับทุกวัตถุในอาร์เรย์ ถ้าฉันต้องการลบวัตถุนั้นในปุ่มอาร์เรย์คลิก ทำอย่างไร . ฉันใช้ angular js ng-repeat เพื่อสร้างรายการ คุณช่วยฉันได้ไหม
Thilak Raj

daCoda จะทำอย่างไรถ้าคุณมีสองเงื่อนไข
Malcolm Salvador

@MalcolmSalvador พูดเช่นถ้าคุณมีเงื่อนไขอื่นคุณสามารถเขียนแบบนี้ด้านล่างและดำเนินการต่อด้วย && หรือ | ผู้ประกอบการตามความต้องการของคุณ someArray = someArray.filter (ฟังก์ชัน (returnableObjects) {return returnableObjects.name! == 'Kristian' && cond2Query.age> = 22;});
Biswajit Panday

18

ฉันได้ทำฟังก์ชั่นแบบไดนามิกใช้วัตถุ Array, Key และค่าและส่งกลับอาร์เรย์เดียวกันหลังจากลบวัตถุที่ต้องการ:

function removeFunction (myObjects,prop,valu)
        {
             return myObjects.filter(function (val) {
              return val[prop] !== valu;
          });

        }

ตัวอย่างเต็มรูปแบบ: DEMO

var obj = {
            "results": [
              {
                  "id": "460",
                  "name": "Widget 1",
                  "loc": "Shed"
              }, {
                  "id": "461",
                  "name": "Widget 2",
                  "loc": "Kitchen"
              }, {
                  "id": "462",
                  "name": "Widget 3",
                  "loc": "bath"
              }
            ]
            };


        function removeFunction (myObjects,prop,valu)
        {
             return myObjects.filter(function (val) {
              return val[prop] !== valu;
          });

        }


console.log(removeFunction(obj.results,"id","460"));

15

นี่คือฟังก์ชั่นที่เหมาะกับฉัน:

function removeFromArray(array, value) {
    var idx = array.indexOf(value);
    if (idx !== -1) {
        array.splice(idx, 1);
    }
    return array;
}

สิ่งอื่นที่ฉันต้องการจะมีปุ่มแยกต่างหากสำหรับทุกวัตถุในอาร์เรย์ ถ้าฉันต้องการลบวัตถุนั้นในปุ่มอาร์เรย์คลิก ทำอย่างไร . ฉันใช้ angular js ng-repeat เพื่อสร้างรายการ คุณช่วยฉันได้ไหม
Thilak Raj

12

คุณสามารถลองทำสิ่งนี้:

var myArray = [{'name': 'test'}, {'name':'test2'}];
var myObject = {'name': 'test'};
myArray.splice(myArray.indexOf(myObject),1);


10

ใช้ฟังก์ชั่น splice ในอาร์เรย์ ระบุตำแหน่งขององค์ประกอบเริ่มต้นและความยาวของลำดับที่คุณต้องการลบ

someArray.splice(pos, 1);

8

โหวตให้UndercoreJSเพื่อทำงานง่ายๆกับอาร์เรย์

_.without ()ฟังก์ชั่นช่วยในการลบองค์ประกอบ:

 _.without([1, 2, 1, 0, 3, 1, 4], 0, 1);
    => [2, 3, 4]

ทางออกที่ดีที่สุด ทำงานร่วมกับอาร์เรย์วัตถุ
Azee

4

ด้วยฟังก์ชั่นลูกศร ES 6

let someArray = [
                 {name:"Kristian", lines:"2,5,10"},
                 {name:"John", lines:"1,19,26,96"}
                ];
let arrayToRemove={name:"Kristian", lines:"2,5,10"};
someArray=someArray.filter((e)=>e.name !=arrayToRemove.name && e.lines!= arrayToRemove.lines)

3

ทางออกที่ง่ายที่สุดคือการสร้างแผนที่ที่จัดเก็บดัชนีสำหรับแต่ละวัตถุตามชื่อดังนี้

//adding to array
var newPerson = {name:"Kristian", lines:"2,5,10"}
someMap[ newPerson.name ] = someArray.length;
someArray.push( newPerson );

//deleting from the array
var index = someMap[ 'Kristian' ];
someArray.splice( index, 1 );

ฉันชอบความคิดนี้ แต่ต้องถามว่าข้อ จำกัด การใช้หน่วยความจำสำหรับแนวคิดเช่นนี้เมื่อมีการเพิ่มดัชนีคืออะไร ฉันมีอาร์เรย์ที่ฉันต้องการทำดัชนีในฟิลด์ที่แตกต่างกัน 2 รายการในวัตถุดังนั้นฉันจึงมี 2 แผนที่นอกเหนือจากอาเรย์ต้นฉบับ นี่เป็นราคาขนาดเล็กสำหรับจ่ายค่าความเร็วในการค้นหาหรือมีวิธีแก้ปัญหาที่จะมีประสิทธิภาพมากขึ้นกับหน่วยความจำหรือไม่?
แบรดจี

3

แม้ว่านี่อาจจะไม่เหมาะสมสำหรับสถานการณ์นี้ฉันรู้ว่าวันอื่น ๆ ที่คุณสามารถใช้deleteคำหลักเพื่อลบรายการออกจากอาเรย์ถ้าคุณไม่จำเป็นต้องเปลี่ยนขนาดของอาเรย์

var myArray = [1,2,3];

delete myArray[1];

console.log(myArray[1]); //undefined

console.log(myArray.length); //3 - doesn't actually shrink the array down

3

คำตอบนี้

for (var i =0; i < someArray.length; i++)
   if (someArray[i].name === "Kristian") {
      someArray.splice(i,1);
   }

ไม่ทำงานสำหรับหลายระเบียนตามเงื่อนไข หากคุณมีระเบียนที่ต่อเนื่องกันสองรายการระบบจะลบเฉพาะระเบียนแรกเท่านั้นและอีกระเบียนหนึ่งจะถูกข้ามไป คุณต้องใช้:

for (var i = someArray.length - 1; i>= 0; i--)
   ...

แทน .


2

ดูเหมือนว่ามีข้อผิดพลาดในไวยากรณ์อาร์เรย์ของคุณดังนั้นสมมติว่าคุณหมายถึงอาร์เรย์ซึ่งตรงข้ามกับวัตถุArray.spliceเป็นเพื่อนของคุณที่นี่:

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

2

คุณสามารถใช้ฟังก์ชั่นแผนที่ได้

someArray = [{name:"Kristian", lines:"2,5,10"},{name:"John",lines:"1,19,26,96"}];
newArray=[];
someArray.map(function(obj, index){
    if(obj.name !== "Kristian"){
       newArray.push(obj);
    }
});
someArray = newArray;
console.log(someArray);

1
แต่ถ้าคุณต้องการที่จะวนซ้ำในอาร์เรย์มันจะดีกว่าถ้าใช้ forEach?
corse32

2

คุณสามารถใช้some:

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

someArray.some(item => { 
    if(item.name === "Kristian") // Case sensitive, will only remove first instance
        someArray.splice(someArray.indexOf(item),1) 
})

2

นี่คือสิ่งที่ฉันใช้

Array.prototype.delete = function(pos){
    this[pos] = undefined;
    var len = this.length - 1;
    for(var a = pos;a < this.length - 1;a++){
      this[a] = this[a+1];
    }
    this.pop();
  }

งั้นมันก็ง่ายเหมือนคำพูด

var myArray = [1,2,3,4,5,6,7,8,9];
myArray.delete(3);

แทนที่หมายเลขใด ๆ แทนสาม หลังจากผลลัพธ์ที่คาดหวังควรเป็น:

console.log(myArray); //Expected output 1,2,3,5,6,7,8,9

2

หากคุณต้องการลบการเกิดขึ้นทั้งหมดของวัตถุที่กำหนด (ขึ้นอยู่กับเงื่อนไขบางอย่าง) จากนั้นใช้วิธีการประกบกันจาวาสคริปต์ภายในสำหรับวง

เนื่องจากการลบวัตถุจะมีผลต่อความยาวของอาร์เรย์ตรวจสอบให้แน่ใจว่าได้ลดจำนวนตัวนับหนึ่งขั้นเพื่อให้การตรวจสอบความยาวยังคงไม่เปลี่ยนแปลง

var objArr=[{Name:"Alex", Age:62},
  {Name:"Robert", Age:18},
  {Name:"Prince", Age:28},
  {Name:"Cesar", Age:38},
  {Name:"Sam", Age:42},
  {Name:"David", Age:52}
];

for(var i = 0;i < objArr.length; i ++)
{
  if(objArr[i].Age > 20)
  {
    objArr.splice(i, 1);
    i--;  //re-adjust the counter.
  }
}

ข้อมูลโค้ดด้านบนจะลบวัตถุทั้งหมดที่มีอายุมากกว่า 20 ปี



1

splice (i, 1) โดยที่ i คือดัชนีที่เพิ่มขึ้นของอาร์เรย์จะลบวัตถุ แต่อย่าลืมว่า splice จะรีเซ็ตความยาวของอาร์เรย์ด้วยดังนั้นโปรดระวัง 'undefined' ใช้ตัวอย่างของคุณถ้าคุณลบ 'Kristian' จากนั้นในการดำเนินการครั้งต่อไปภายในลูปฉันจะเป็น 2 แต่อาร์เรย์บางอันจะมีความยาว 1 ดังนั้นหากคุณพยายามลบ "John" คุณจะได้รับข้อผิดพลาด "undefined" . ทางออกหนึ่งสำหรับสิ่งนี้แม้ว่าจะไม่ได้สวยงามก็คือการแยกตัวนับเพื่อติดตามดัชนีขององค์ประกอบที่จะถูกลบออก


1

ส่งคืนเฉพาะวัตถุจากอาร์เรย์ที่มีคุณสมบัติnameไม่ใช่ "Kristian"

var noKristianArray = $.grep(someArray, function (el) { return el.name!= "Kristian"; });


การสาธิต:

 var someArray = [
                {name:"Kristian", lines:"2,5,10"},
                {name:"John", lines:"1,19,26,96"},
                {name:"Kristian", lines:"2,58,160"},
                {name:"Felix", lines:"1,19,26,96"}
                ];
			 
var noKristianArray = $.grep(someArray, function (el) { return el.name!= "Kristian"; });

console.log(noKristianArray);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>


0

แนวคิดนี้ใช้ Kendo Grid

var grid = $("#addNewAllergies").data("kendoGrid");

var selectedItem = SelectedCheckBoxList;

for (var i = 0; i < selectedItem.length; i++) {
    if(selectedItem[i].boolKendoValue==true)
    {
        selectedItem.length= 0;
    }
}

0

ฉันเดาว่าคำตอบนั้นแยกออกและผูกปมกันมาก

คุณสามารถใช้พา ธ ต่อไปนี้เพื่อลบอาเรย์ออบเจ็กต์ที่ตรงกับวัตถุที่กำหนดในศัพท์แสงจาวาสคริปต์สมัยใหม่


coordinates = [
    { lat: 36.779098444109145, lng: 34.57202827508546 },
    { lat: 36.778754712956506, lng: 34.56898128564454 },
    { lat: 36.777414146732426, lng: 34.57179224069215 }
];

coordinate = { lat: 36.779098444109145, lng: 34.57202827508546 };

removeCoordinate(coordinate: object) {
  const found = this.coordinates.find((obj) => obj === obj);
  if (found) {
    this.coordinates.splice(found, 1);
  }
}

this.removeCoordinate(coordinate);

-2

หากคุณต้องการเข้าถึงและลบวัตถุของอาร์เรย์คุณสามารถลองสิ่งนี้

// inside some function

let someArray = [ {"ColumnName" : "a", "PropertySerno" : 100005,"UpdateType" : 1},
                  {"ColumnName" : "b", "PropertySerno" : 100202,"UpdateType" : 1,
        "ShowRemoveButton" : true} ];
        
        for (let item of someArray) {
          delete item.ShowRemoveButton;
        }
        console.log(item.outputMappingData.Data);
        
//output will be like that = [ {"ColumnName" : "a", "PropertySerno" : 100005,"UpdateType" : 1},
//                             {"ColumnName" : "b", "PropertySerno" : 100202,"UpdateType" : 1 }];
        

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.