Belirli bir ├Â─čeyi JavaScript'teki bir diziden nas─▒l kald─▒r─▒r─▒m?


Al─▒nan cevaba git


Bir dizi numaram var ve .push() ona eleman eklemek i├žin metodu kullan─▒yorum .

Bir diziden belirli bir ├Â─čeyi kald─▒rman─▒n basit bir yolu var m─▒? Gibi bir ┼čeyin e┼čde─čeri array.remove(number); .

Temel JavaScript kullanmal─▒y─▒m - ├žer├ževelere izin verilmiyor.


7524









Cevap say─▒s─▒n─▒ say: 30






index Kald─▒rmak istedi─činiz dizi eleman─▒n─▒ bulun ve bu dizini ile birlikte kald─▒r─▒n splice .

Splice () y├Ântemi, mevcut ├Â─čeleri kald─▒rarak ve / veya yeni ├Â─čeler ekleyerek bir dizinin i├žeri─čini de─či┼čtirir.

 var array = [2, 5, 9];
console.log(array)
var index = array.indexOf(5);
if (index > -1) {
  array.splice(index, 1);
}
// array = [2, 9]
console.log(array); 

─░kinci parametre, splice kald─▒r─▒lacak ├Â─če say─▒s─▒d─▒r. splice Diziyi yerinde de─či┼čtirdi─čini ve kald─▒r─▒lan ├Â─čeleri i├žeren yeni bir dizi d├Ând├╝rd├╝─č├╝n├╝ unutmay─▒n .


10784







Nas─▒l array.remove(int) davranmay─▒ bekledi─čini bilmiyorum . ─░stedi─čini d├╝┼č├╝nebildi─čim ├╝├ž olas─▒l─▒k var.

Dizideki bir dizinin eleman─▒n─▒ kald─▒rmak i├žin i :

 array.splice(i, 1);
 

Diziden de─čeri number olan her ├Â─čeyi kald─▒rmak istiyorsan─▒z :

 for(var i = array.length - 1; i >= 0; i--) {
    if(array[i] === number) {
       array.splice(i, 1);
    }
}
 

Sadece ├Â─čeyi dizinde i yapmak istemiyorsan─▒z, di─čer ├Â─čelerin dizinlerinin de─či┼čmesini istemiyorsan─▒z:

 delete array[i];
 

1133







2016 Ekim'de d├╝zenlendi

  • Basit, sezgisel ve a├ž─▒k bir ┼čekilde yap─▒n ( Occam'─▒n jilet )
  • De─či┼čmez yap (orijinal dizi de─či┼čmeden kal─▒r)
  • Taray─▒c─▒n─▒z desteklemiyorsa standart JavaScript i┼člevleriyle yap─▒n - polyfill kullan─▒n

Bu kod ├Ârne─činde, istenmeyen ├Â─čeleri diziden kald─▒rmak i├žin "array.filter (...)" i┼člevini kullan─▒yorum. Bu i┼člev orijinal diziyi de─či┼čtirmez ve yeni bir tane olu┼čturur. Taray─▒c─▒n─▒z bu i┼člevi desteklemiyorsa (├Ârne─čin, s├╝r├╝m 9'dan ├Ânceki Internet Explorer veya s├╝r├╝m 1.5'ten ├Ânceki Firefox), Mozilla'dan gelen filtre polyfillini kullanmay─▒ d├╝┼č├╝n├╝n .

├ľ─čeyi kald─▒rma (ECMA-262 Edition 5 kodu aka oldstyle JavaScript)

 var value = 3

var arr = [1, 2, 3, 4, 5, 3]

arr = arr.filter(function(item) {
    return item !== value
})

console.log(arr)
// [ 1, 2, 4, 5 ]
 

├ľ─čeyi kald─▒rma (ECMAScript 6 kodu)

 let value = 3

let arr = [1, 2, 3, 4, 5, 3]

arr = arr.filter(item => item !== value)

console.log(arr)
// [ 1, 2, 4, 5 ]
 

├ľNEML─░ ECMAScript 6 "() => {}" ok i┼člevi s├Âzdizimi, Internet Explorer'da, 45 s├╝r├╝mden ├Ânce Chrome, 22 s├╝r├╝mden ├Ânce Firefox ve 10 s├╝r├╝mden ├Ânce Safari'de desteklenmez. ECMAScript 6 s├Âzdizimini eski taray─▒c─▒larda kullanmak i├žin BabelJS kullanabilirsiniz .


Birden ├žok ├Â─čeyi kald─▒rma (ECMAScript 7 kodu)

Bu y├Ântemin ek bir avantaj─▒, birden fazla ├Â─čeyi kald─▒rabilmenizdir.

 let forDeletion = [2, 3, 5]

let arr = [1, 2, 3, 4, 5, 3]

arr = arr.filter(item => !forDeletion.includes(item))
// !!! Read below about array.includes(...) support !!!

console.log(arr)
// [ 1, 4 ]
 

├ľNEML─░ "array.includes (...)" i┼člevi 9 versiyonundan ├Ânce Safari, 43 s├╝r├╝m├╝ ├Âncesinde 47 versiyonundan ├Ânce hi├ž Internet Explorer, Chrome, Firefox desteklenmez ve bu y├╝zden Kenar ├Ânce 14 s├╝r├╝m├╝ buradan Mozilla polyfill oldu─čunu .

Birden ├žok ├Â─čeyi kald─▒rma (gelecekte, belki)

"Bu Ba─člay─▒c─▒ S├Âzdizimi" teklifi kabul edilirse , ┼čunlar─▒ yapabilirsiniz:

 // array-lib.js

export function remove(...forDeletion) {
    return this.filter(item => !forDeletion.includes(item))
}

// main.js

import { remove } from './array-lib.js'

let arr = [1, 2, 3, 4, 5, 3]

// :: This-Binding Syntax Proposal
// using "remove" function as "virtual method"
// without extending Array.prototype
arr = arr::remove(2, 3, 5)

console.log(arr)
// [ 1, 4 ]
 

BabelJS'de kendiniz deneyin :)

Referans


988







Bo┼č bir yer tutmak isteyip istemedi─činize ba─čl─▒d─▒r.

Bo┼č bir yuva istiyorsan─▒z, silme i┼člemi tamamd─▒r:

 delete array[index];
 

Yapmazsan─▒z , splice y├Ântemini kullanmal─▒s─▒n─▒z :

 array.splice(index, 1);
 

Ve bu ├Â─čenin de─čerine ihtiyac─▒n─▒z varsa, sadece d├Ând├╝r├╝len dizinin eleman─▒n─▒ saklayabilirsiniz:

 var value = array.splice(index, 1)[0];
 

Bir d├╝zende yapmak isterseniz array.pop() , sonuncusu veya array.shift() birincisi i├žin kullanabilirsiniz (ve her ikisi de ├Â─čenin de─čerini d├Ând├╝r├╝r).

Maddenin indeksini bilmiyorsan─▒z, array.indexOf(item) onu almak i├žin kullanabilirsiniz ( if() bir ├Â─čeyi almak i├žin veya bir ├Â─čeyi while() almak i├žin). array.indexOf(item) bulunmazsa dizini veya -1 d├Ând├╝r├╝r. 


413







Bir arkada┼č─▒m Internet Explorer 8ÔÇÖde sorunlar─▒ ya┼č─▒yordu ve bana ne yapt─▒─č─▒n─▒ g├Âsterdi. Ona yanl─▒┼č oldu─čunu s├Âyledim ve cevab─▒ burada ald─▒─č─▒n─▒ s├Âyledi. Ge├žerli en iyi yan─▒t, t├╝m taray─▒c─▒larda ├žal─▒┼čmayacak (├Ârne─čin, Internet Explorer 8) ve yaln─▒zca ├Â─čenin ilk olu┼čumunu kald─▒racakt─▒r.

Bir diziden T├ťM ├Ârnekleri kald─▒r─▒n

 function remove(arr, item) {
    for (var i = arr.length; i--;) {
        if (arr[i] === item) {
            arr.splice(i, 1);
        }
    }
}
 

Diziyi geriye do─čru d├Ând├╝r├╝r (├Â─čeler kald─▒r─▒ld─▒k├ža endeksler ve uzunluk de─či┼čece─činden) ve bulunursa ├Â─čeyi kald─▒r─▒r. T├╝m taray─▒c─▒larda ├žal─▒┼č─▒r.


257







─░ki ana yakla┼č─▒m var:

  1. splice () : anArray.splice(index, 1);

  2. sil : delete anArray[index];

Bir dizi i├žin delete kullan─▒rken dikkatli olun. Nesnelerin ├Âzniteliklerini silmek i├žin iyidir, ancak diziler i├žin iyi de─čildir. splice Diziler i├žin kullanmak daha iyidir .

delete Bir dizi i├žin kullan─▒rken yanl─▒┼č sonu├žlar alabilece─činizi unutmay─▒n anArray.length . Ba┼čka bir deyi┼čle, delete ├Â─čeyi kald─▒r─▒r, ancak length ├Âzelli─činin de─čerini g├╝ncellemez.

Ayr─▒ca, silme i┼čleminden sonra dizin numaralar─▒nda delikler bekleyebilirsiniz; ├Ârne─čin, silme i┼čleminden ├Ânce oldu─ču gibi, 1, 3, 4, 8, 9 ve 11 dizinleri ve uzunlu─čuna sahip olabilirsiniz. Bu durumda, dizinlenmi┼č t├╝m for d├Âng├╝ler ├ž├Âkecektir, ├ž├╝nk├╝ dizinler art─▒k s─▒ral─▒ de─čildir.

Herhangi bir delete sebepten dolay─▒ kullanmak zorunda kal─▒rsan─▒z, for each diziler aras─▒nda dola┼čman─▒z gerekti─činde d├Âng├╝ler kullanmal─▒s─▒n─▒z . Asl─▒nda, for m├╝mk├╝nse, indeksli d├Âng├╝ler kullanmaktan her zaman ka├ž─▒n─▒n . Bu ┼čekilde kod daha sa─člam ve dizinlerle ilgili sorunlara daha az e─čilimli olacakt─▒r.


153


2012-12-21





 Array.prototype.remByVal = function(val) {
    for (var i = 0; i < this.length; i++) {
        if (this[i] === val) {
            this.splice(i, 1);
            i--;
        }
    }
    return this;
}
//Call like
[1, 2, 3, 4].remByVal(3);
 

 Array.prototype.remByVal = function(val) {
    for (var i = 0; i < this.length; i++) {
        if (this[i] === val) {
            this.splice(i, 1);
            i--;
        }
    }
    return this;
}

var rooms = ['hello', 'something']

rooms = rooms.remByVal('hello')

console.log(rooms) 


128







indexOf Veya kullanmaya gerek yoktur splice . Ancak, yaln─▒zca bir eleman─▒n bir olu┼čumunu kald─▒rmak istiyorsan─▒z daha iyi performans g├Âsterir.

Bul ve ta┼č─▒ (ta┼č─▒):

 function move(arr, val) {
  var j = 0;
  for (var i = 0, l = arr.length; i < l; i++) {
    if (arr[i] !== val) {
      arr[j++] = arr[i];
    }
  }
  arr.length = j;
}
 

Kullan─▒n indexOf ve splice (indexof):

 function indexof(arr, val) {
  var i;
  while ((i = arr.indexOf(val)) != -1) {
    arr.splice(i, 1);
  }
}
 

Sadece kullan─▒n splice (ekleme):

 function splice(arr, val) {
  for (var i = arr.length; i--;) {
    if (arr[i] === val) {
      arr.splice(i, 1);
    }
  }
}
 

1000 ├Â─čeli dizi i├žin d├╝─č├╝mlerde ├žal─▒┼čma s├╝releri (ortalama 10000'den fazla ├žal─▒┼čt─▒rma):

indexof , hareket etmekten yakla┼č─▒k 10 kat daha yava┼č . ├ça─čr─▒s─▒na kald─▒rarak geli┼čtirilmi┼č olsa bile indexOf i├žinde ek yeri o ├žok daha k├Ât├╝ performans g├Âsteren hareket .

 Remove all occurrences:
    move 0.0048 ms
    indexof 0.0463 ms
    splice 0.0359 ms

Remove first occurrence:
    move_one 0.0041 ms
    indexof_one 0.0021 ms
 

94







Bu bir de─čer yerine bir belirte├ž sa─člar.

NOT: verilen diziyi g├╝nceller ve etkilenen sat─▒rlar─▒ d├Ând├╝r├╝r.

kullan─▒m

 var removed = helper.removeOne(arr, row => row.id === 5 );

var removed = helper.remove(arr, row => row.name.startsWith('BMW'));
 

Tan─▒m

 var helper = {

    // Remove and return the first occurrence

    removeOne: function(array, predicate) {
        for (var i = 0; i < array.length; i++) {
            if (predicate(array[i])) {
                return array.splice(i, 1);
            }
        }
    },

    // Remove and return all occurrences

    remove: function(array, predicate) {
        var removed = [];

        for (var i = 0; i < array.length;) {

            if (predicate(array[i])) {
                removed.push(array.splice(i, 1));
                continue;
            }
            i++;
        }
        return removed;
    }
};
 

64


2014-05-02





John Resig iyi bir uygulama yay─▒nlad─▒ :

 // Array Remove - By John Resig (MIT Licensed)
Array.prototype.remove = function(from, to) {
  var rest = this.slice((to || from) + 1 || this.length);
  this.length = from < 0 ? this.length + from : from;
  return this.push.apply(this, rest);
};
 

Genel bir nesneyi geni┼čletmek istemiyorsan─▒z, bunun yerine a┼ča─č─▒daki gibi bir ┼čey yapabilirsiniz:

 // Array Remove - By John Resig (MIT Licensed)
Array.remove = function(array, from, to) {
    var rest = array.slice((to || from) + 1 || array.length);
    array.length = from < 0 ? array.length + from : from;
    return array.push.apply(array, rest);
};
 

Ancak bunu g├Ândermemdeki as─▒l sebep, kullan─▒c─▒lar─▒ bu sayfadaki yorumlarda ├Ânerilen alternatif uygulamaya kar┼č─▒ uyarmakt─▒r (14 Aral─▒k 2007):

 Array.prototype.remove = function(from, to){
  this.splice(from, (to=[0,from||1,++to-from][arguments.length])<0?this.length+to:to);
  return this.length;
};
 

─░lk ba┼čta iyi ├žal─▒┼č─▒yor gibi g├Âz├╝k├╝yor, ama ac─▒ verici bir s├╝re├žte, bir dizideki ikinci-son eleman─▒ ├ž─▒karmaya ├žal─▒┼č─▒rken ba┼čar─▒s─▒z oldu─čunu ke┼čfettim. ├ľrne─čin, 10 ├Â─čeli bir diziniz varsa ve 9. ├Â─čeyi bununla kald─▒rmay─▒ denerseniz:

 myArray.remove(8);
 

8 elementli bir dizi ile bitiyorsun. Nedenini bilmiyorum ama John'un orijinal uygulamas─▒n─▒n bu sorunu olmad─▒─č─▒n─▒ onaylad─▒m.


58







Underscore.js , birden fazla taray─▒c─▒yla ilgili sorunlar─▒ ├ž├Âzmek i├žin kullan─▒labilir. Varsa, yerle┼čik taray─▒c─▒ y├Ântemlerini kullan─▒r. Eski Internet Explorer s├╝r├╝mlerinde oldu─ču gibi yoksa, kendi ├Âzel y├Ântemlerini kullan─▒r.

├ľ─čeleri diziden kald─▒rmak i├žin basit bir ├Ârnek (web sitesinden):

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

58







Filtre y├Ântemiyle kolayca yapabilirsiniz :

 function remove(arrOriginal, elementToRemove){
    return arrOriginal.filter(function(el){return el !== elementToRemove});
}
console.log(remove([1, 2, 1, 0, 3, 1, 4], 1));
 

Bu diziden t├╝m ├Â─čeleri kald─▒r─▒r ve ayn─▒ zamanda bir kombinasyonu daha h─▒zl─▒ ├žal─▒┼č─▒r slice ve indexOf .


58







Silinen konumlar─▒n kald─▒r─▒ld─▒─č─▒ yeni bir dizi istiyorsan─▒z, belirli bir ├Â─čeyi silebilir ve diziyi filtreleyebilirsiniz. Filtre y├Ântemini uygulamayan taray─▒c─▒lar i├žin dizi nesnesinin bir uzant─▒s─▒na ihtiyac─▒ olabilir , ancak uzun vadede yapman─▒z gereken tek ┼čey bu:

 var my_array = [1, 2, 3, 4, 5, 6];
delete my_array[4];
console.log(my_array.filter(function(a){return typeof a !== 'undefined';}));
 

G├Âstermeli [1, 2, 3, 4, 6] .


47







ES6'y─▒ kullanabilirsiniz. ├ľrne─čin bu durumda '3' de─čerini silmek i├žin:

 var array=['1','2','3','4','5','6']
var newArray = array.filter((value)=>value!='3');
console.log(newArray);
 

Çıktı :

 ["1", "2", "4", "5", "6"]
 

44







Bu kodu kontrol et. Her b├╝y├╝k taray─▒c─▒da ├žal─▒┼č─▒r .

 remove_item = function (arr, value) {
    var b = '';
    for (b in arr) {
        if (arr[b] === value) {
            arr.splice(b, 1);
            break;
        }
    }
    return arr;
}
 

Bu fonksiyonu ├ža─č─▒r

 remove_item(array,value);
 

38







Lodash _.pull ( mutate array), _.pullAt ( mutate array) veya _.without komutunu kullanabilirsiniz (dizi mutasyon yapmaz ),

 var array1 = ['a', 'b', 'c', 'd']
_.pull(array1, 'c')
console.log(array1) // ['a', 'b', 'd']

var array2 = ['e', 'f', 'g', 'h']
_.pullAt(array2, 0)
console.log(array2) // ['f', 'g', 'h']

var array3 = ['i', 'j', 'k', 'l']
var newArray = _.without(array3, 'i') // ['j', 'k', 'l']
console.log(array3) // ['i', 'j', 'k', 'l']
 

35







Tamam, ├Ârne─čin a┼ča─č─▒daki diziye sahipsiniz:

 var num = [1, 2, 3, 4, 5];
 

Ve say─▒ 4'├╝ silmek istiyoruz. A┼ča─č─▒daki kodu kullanabilirsiniz:

 num.splice(num.indexOf(4), 1); // num will be [1, 2, 3, 5];
 

Bu i┼člevi yeniden kullan─▒yorsan─▒z, a┼ča─č─▒daki gibi yerel dizi i┼člevine eklenecek yeniden kullan─▒labilir bir i┼člev yazars─▒n─▒z :

 Array.prototype.remove = Array.prototype.remove || function(x) {
  const i = this.indexOf(x);
  if(i===-1)
      return;
  this.splice(i, 1); // num.remove(5) === [1, 2, 3];
}
 

Peki dizideki birka├ž [5] yerine bunun yerine a┼ča─č─▒daki diziye sahipseniz?

 var num = [5, 6, 5, 4, 5, 1, 5];
 

Hepsini kontrol etmek i├žin bir d├Âng├╝ye ihtiyac─▒m─▒z var, ancak yerle┼čik JavaScript i┼člevlerini kullanmak daha kolay ve daha etkili bir yol, bu nedenle a┼ča─č─▒daki gibi bir s├╝zge├ž kullanan bir i┼člev yaz─▒yoruz:

 const _removeValue = (arr, x) => arr.filter(n => n!==x);
//_removeValue([1, 2, 3, 4, 5, 5, 6, 5], 5) // Return [1, 2, 3, 4, 6]
 

Ayr─▒ca, Lodash veya Underscore gibi, bunu yapman─▒za yard─▒mc─▒ olan ├╝├ž├╝nc├╝ taraf k├╝t├╝phaneleri vard─▒r. Daha fazla bilgi i├žin bkz. Lodash _.pull, _.pullAt veya _.without.


31







─░┼čte birka├ž yolu vard─▒r JavaScript kullanarak bir diziden bir ├Â─čeyi kald─▒rmak .

A├ž─▒klanan t├╝m y├Ântemler orijinal diziyi de─či┼čtirmez ve bunun yerine yenisini yarat─▒r.

Bir ├Â─čenin indeksini biliyorsan─▒z

Bir diziniz oldu─čunu ve bir ├Â─čenin konumunu kald─▒rmak istedi─činizi varsayal─▒m i .

Bir y├Ântem kullanmakt─▒r slice() :

 const items = ['a', 'b', 'c', 'd', 'e', 'f']
const i = 3
const filteredItems = items.slice(0, i).concat(items.slice(i+1, items.length))

console.log(filteredItems) 

slice() ald─▒─č─▒ indekslerle yeni bir dizi olu┼čturur. Basit├že ba┼čtan kald─▒rmak istedi─čimiz dizine yeni bir dizi yarat─▒r─▒z ve dizinin sonuna kadar ├ž─▒kard─▒─č─▒m─▒z diziyi izleyen ilk konumdan ba┼čka bir diziyi birle┼čtiririz.

E─čer de─čeri biliyorsan

Bu durumda, bir iyi bir se├ženek kullan─▒m─▒na olan filter() bir fazlas─▒n─▒ sunuyor, bildirim yakla┼č─▒m:

 const items = ['a', 'b', 'c', 'd', 'e', 'f']
const valueToRemove = 'c'
const filteredItems = items.filter(item => item !== valueToRemove)

console.log(filteredItems) 

Bu, ES6 ok i┼člevlerini kullan─▒r. Eski taray─▒c─▒lar─▒ desteklemek i├žin geleneksel i┼člevleri kullanabilirsiniz:

 const items = ['a', 'b', 'c', 'd', 'e', 'f']
const valueToRemove = 'c'
const filteredItems = items.filter(function(item) {
  return item !== valueToRemove
})

console.log(filteredItems) 

veya Babil'i kullanabilir ve ES6 kodunu eski taray─▒c─▒lara daha sindirilebilir hale getirmek i├žin ES5'e geri d├Ând├╝rebilirsiniz, ancak kodunuza modern JavaScript yazabilirsiniz.

Birden ├žok ├Â─čeyi kald─▒rma

Tek bir ├Â─če yerine bir├žok ├Â─čeyi kald─▒rmak istiyorsan─▒z ne yapmal─▒y─▒m?

En basit ├ž├Âz├╝m├╝ bulal─▒m.

Dizine g├Âre

Yaln─▒zca bir i┼člev olu┼čturabilir ve serideki ├Â─čeleri kald─▒rabilirsiniz:

 const items = ['a', 'b', 'c', 'd', 'e', 'f']

const removeItem = (items, i) =>
  items.slice(0, i-1).concat(items.slice(i, items.length))

let filteredItems = removeItem(items, 3)
filteredItems = removeItem(filteredItems, 5)
//["a", "b", "c", "d"]

console.log(filteredItems) 

De─čere g├Âre

Geri arama i┼člevinin i├žine dahil etmek i├žin arama yapabilirsiniz:

 const items = ['a', 'b', 'c', 'd', 'e', 'f']
const valuesToRemove = ['c', 'd']
const filteredItems = items.filter(item => !valuesToRemove.includes(item))
// ["a", "b", "e", "f"]

console.log(filteredItems) 

Orijinal diziyi de─či┼čtirmekten ka├ž─▒n─▒n

splice() (kar─▒┼čt─▒r─▒lmamas─▒ gereken slice() ) orijinal diziyi de─či┼čtirir ve bundan ka├ž─▒n─▒lmal─▒d─▒r.

(ba┼člang─▒├žta https://flaviocopes.com/how-to-remove-item-from-array/ adresinde yay─▒nlanm─▒┼čt─▒r )


29







JavaScript konusunda olduk├ža yeniyim ve bu i┼člevselli─če ihtiyac─▒m vard─▒. Sadece ┼čunu yazd─▒m:

 function removeFromArray(array, item, index) {
  while((index = array.indexOf(item)) > -1) {
    array.splice(index, 1);
  }
}
 

Sonra kullanmak istedi─čimde:

 //Set-up some dummy data
var dummyObj = {name:"meow"};
var dummyArray = [dummyObj, "item1", "item1", "item2"];

//Remove the dummy data
removeFromArray(dummyArray, dummyObj);
removeFromArray(dummyArray, "item2");
 

├ç─▒kt─▒ - Beklendi─či gibi. ["item1", "item1"]

Benden farkl─▒ ihtiya├žlar─▒n─▒z olabilir, bu y├╝zden kolayca onlara uyacak ┼čekilde de─či┼čtirebilirsiniz. Umar─▒m bu birine yard─▒mc─▒ olur.


27







ES6 ve mutasyon olmadan: (Ekim 2016)

 const removeByIndex = (list, index) =>
  [
    ...list.slice(0, index),
    ...list.slice(index + 1)
  ];
 

Sonra :

 removeByIndex([33,22,11,44],1) //=> [33,11,44]
 

27







Dizide karma┼č─▒k nesneler varsa, filtreleri kullanabilirsiniz? $ .─░nArray veya array.splice'in kullan─▒m─▒ kolay de─čildir. ├ľzellikle nesnelerin dizide s─▒─č olmas─▒ durumunda.

├ľrne─čin, Kimlik alan─▒ olan bir nesneniz varsa ve nesnenin bir diziden kald─▒r─▒lmas─▒n─▒ istiyorsan─▒z:

 this.array = this.array.filter(function(element, i) {
    return element.id !== idToRemove;
});
 

24







G├╝ncelleme: Bu y├Ântem yaln─▒zca ECMAScript 2015'i (eski ad─▒ ES6 olarak bilinir) kullanam─▒yorsan─▒z ├Ânerilir. Kullanabiliyorsan─▒z, buradaki di─čer cevaplar daha d├╝zenli uygulamalar sunar.


Bu bo┼čluk , sorununuzu ├ž├Âzecek ve ayn─▒ zamanda sadece 1 (veya belirli bir de─čer) yerine arg├╝man─▒n t├╝m olu┼čumlar─▒n─▒ silecektir.

 Array.prototype.destroy = function(obj){
    // Return null if no objects were found and removed
    var destroyed = null;

    for(var i = 0; i < this.length; i++){

        // Use while-loop to find adjacent equal objects
        while(this[i] === obj){

            // Remove this[i] and store it within destroyed
            destroyed = this.splice(i, 1)[0];
        }
    }

    return destroyed;
}
 

Kullan─▒m─▒:

 var x = [1, 2, 3, 3, true, false, undefined, false];

x.destroy(3);         // => 3
x.destroy(false);     // => false
x;                    // => [1, 2, true, undefined]

x.destroy(true);      // => true
x.destroy(undefined); // => undefined
x;                    // => [1, 2]

x.destroy(3);         // => null
x;                    // => [1, 2]
 

23







ECMAScript 6'ya dayanarak cevap vermek istiyorum . Diyelim ki a┼ča─č─▒dakine benzer bir diziniz var:

 let arr = [1,2,3,4];
 

Gibi ├Âzel bir dizinde silmek istiyorsan─▒z 2 , a┼ča─č─▒daki kodu yaz─▒n:

 arr.splice(2, 1); //=> arr became [1,2,4]
 

Ancak, gibi ├Âzel bir ├Â─čeyi silmek istiyorsan─▒z 3 ve dizinini bilmiyorsan─▒z, a┼ča─č─▒dakini yap─▒n:

 arr = arr.filter(e => e !== 3); //=> arr became [1,2,4]
 

─░pucu : Bo┼č bir dizi elde etmedi─činiz s├╝rece l├╝tfen filtre geri ├ža─č─▒rma i├žin bir ok i┼člevi kullan─▒n.


23







Dizini asla de─či┼čtirmemelisin. Bunun nedeni i┼člevsel programlama ┼čablonuna kar┼č─▒ olmas─▒d─▒r. ECMAScript 6 y├Ântemini kullanarak verileri de─či┼čtirmek istedi─činiz diziye referans vermeden yeni bir dizi olu┼čturabilirsiniz filter ;

 var myArray = [1, 2, 3, 4, 5, 6];
 

Diziden kald─▒rmak istedi─činizi varsayal─▒m 5 , basit├že ┼č├Âyle yapabilirsiniz:

 myArray = myArray.filter(value => value !== 5);
 

Bu size kald─▒rmak istedi─činiz de─čeri olmayan yeni bir dizi verecektir. B├Âylece sonu├ž olacak:

  [1, 2, 3, 4, 6]; // 5 has been removed from this array
 

Daha fazla anlamak i├žin MDN belgelerini Array.filter sayfas─▒ndan okuyabilirsiniz .


20







Daha modern, ECMAScript 2015 (eskiden Harmony veya ES 6 olarak bilinir) yakla┼č─▒m─▒. Verilen:

 const items = [1, 2, 3, 4];
const index = 2;
 

Sonra:

 items.filter((x, i) => i !== index);
 

Verim:

 [1, 2, 4]
 

Bunun taray─▒c─▒lar aras─▒nda iyi desteklendi─činden emin olmak i├žin Babel ve bir polyfill servisi kullanabilirsiniz.


19







Bir diziden belirli bir eleman─▒n / dizginin ├ž─▒kar─▒lmas─▒ tek bir astarda yap─▒labilir: Hala bunun bu t├╝r bir problem i├žin elde edebilece─činiz en ┼č─▒k bir astar oldu─čunu d├╝┼č├╝n├╝yorum:

 theArray.splice(theArray.indexOf("stringToRemoveFromArray"), 1);
 

nerede theArray sizden belirli bir ┼čey kald─▒rmak istedi─činiz dizidir, stringToRemoveFromArray sen kald─▒r─▒lmas─▒n─▒ istedi─činiz dizedir ve 1 kald─▒rmak istedi─činiz ├Â─čelerin miktar─▒d─▒r.


18







Dizideki 1 - 9'unuz var ve 5'i kald─▒rmak istiyorsunuz. A┼ča─č─▒daki kodu kullan─▒n:

 var numberArray = [1, 2, 3, 4, 5, 6, 7, 8, 9];

var newNumberArray = numberArray.filter(m => {
  return m !== 5;
});

console.log("new Array, 5 removed", newNumberArray); 


Birden fazla de─čer istiyorsan─▒z. ├ľrnek: - 1,7,8

 var numberArray = [1, 2, 3, 4, 5, 6, 7, 8, 9];

var newNumberArray = numberArray.filter(m => {
  return (m !== 1) && (m !== 7) && (m !== 8);
});

console.log("new Array, 1,7 and 8 removed", newNumberArray); 


Bir dizideki bir dizi de─čerini kald─▒rmak istiyorsan─▒z. ├ľrnek: [3,4,5]

 var numberArray = [1, 2, 3, 4, 5, 6, 7, 8, 9];
var removebleArray = [3,4,5];

var newNumberArray = numberArray.filter(m => {
    return !removebleArray.includes(m);
});

console.log("new Array, [3,4,5] removed", newNumberArray); 

Desteklenen taray─▒c─▒y─▒ i├žerir ba─člant─▒ .


17







Biliyorum zaten ├žok fazla cevap var ama bir├žo─ču problemi zorla┼čt─▒r─▒yor gibi g├Âr├╝n├╝yor. Anahtar─▒n t├╝m ├Ârneklerini kald─▒rman─▒n basit, ├Âzyinelemeli yolu - dizin bulunana kadar kendini ├ža─č─▒r─▒r. Evet, yaln─▒zca taray─▒c─▒larda ├žal─▒┼č─▒r indexOf , ancak basittir ve kolayca polyfilled edilebilir.

Tek ba┼č─▒na fonksiyonu

 function removeAll(array, key){
    var index = array.indexOf(key);

    if(index === -1) return;

    array.splice(index, 1);
    removeAll(array,key);
}
 

Prototip y├Ântemi

 Array.prototype.removeAll = function(key){
    var index = this.indexOf(key);

    if(index === -1) return;

    this.splice(index, 1);
    this.removeAll(key);
}
 

16







Esas olarak do─čru olan ve ├Ânerilen en iyi uygulamalar─▒ g├Âz ├Ân├╝nde bulunduran (├Âzellikle Array.prototype'yi do─črudan kullanmamak ├╝zere) t├╝m cevaplara dayanarak, a┼ča─č─▒daki kodu buldum:

 function arrayWithout(arr, values) {
  var isArray = function(canBeArray) {
    if (Array.isArray) {
      return Array.isArray(canBeArray);
    }
    return Object.prototype.toString.call(canBeArray) === '[object Array]';
  };

  var excludedValues = (isArray(values)) ? values : [].slice.call(arguments, 1);
  var arrCopy = arr.slice(0);

  for (var i = arrCopy.length - 1; i >= 0; i--) {
    if (excludedValues.indexOf(arrCopy[i]) > -1) {
      arrCopy.splice(i, 1);
    }
  }

  return arrCopy;
}
 

Yukar─▒daki i┼člevi inceleyerek, d├╝zg├╝n ├žal─▒┼čmas─▒na ra─čmen, performansta bir iyile┼čme olabilece─čini fark ettim. Ayr─▒ca ES5 yerine ES6 kullan─▒m─▒ ├žok daha iyi bir yakla┼č─▒md─▒r. Bu ama├žla, bu geli┼čtirilmi┼č koddur:

 const arrayWithoutFastest = (() => {
  const isArray = canBeArray => ('isArray' in Array) 
    ? Array.isArray(canBeArray) 
    : Object.prototype.toString.call(canBeArray) === '[object Array]';

  let mapIncludes = (map, key) => map.has(key);
  let objectIncludes = (obj, key) => key in obj;
  let includes;

  function arrayWithoutFastest(arr, ...thisArgs) {
    let withoutValues = isArray(thisArgs[0]) ? thisArgs[0] : thisArgs;

    if (typeof Map !== 'undefined') {
      withoutValues = withoutValues.reduce((map, value) => map.set(value, value), new Map());
      includes = mapIncludes;
    } else {
      withoutValues = withoutValues.reduce((map, value) => { map[value] = value; return map; } , {}); 
      includes = objectIncludes;
    }

    const arrCopy = [];
    const length = arr.length;

    for (let i = 0; i < length; i++) {
      // If value is not in exclude list
      if (!includes(withoutValues, arr[i])) {
        arrCopy.push(arr[i]);
      }
    }

    return arrCopy;
  }

  return arrayWithoutFastest;  
})();
 

Nas─▒l kullan─▒l─▒r:

 const arr = [1,2,3,4,5,"name", false];

arrayWithoutFastest(arr, 1); // will return array [2,3,4,5,"name", false]
arrayWithoutFastest(arr, 'name'); // will return [2,3,4,5, false]
arrayWithoutFastest(arr, false); // will return [2,3,4,5]
arrayWithoutFastest(arr,[1,2]); // will return [3,4,5,"name", false];
arrayWithoutFastest(arr, {bar: "foo"}); // will return the same array (new copy)
 

┼×u anda Array i├žin birka├ž ├ž├Âz├╝m├╝ k─▒yaslad─▒─č─▒m ve ├žal─▒┼čt─▒rma s├╝resini kar┼č─▒la┼čt─▒rd─▒─č─▒m bir blog yaz─▒s─▒ yaz─▒yorum. Bu yaz─▒y─▒ bitirdikten sonra bu cevab─▒ ba─člant─▒ ile g├╝ncelleyece─čim. Sadece size bildirmek i├žin yukar─▒dakileri hi├žbir ┼čey yapmadan ve taray─▒c─▒n─▒n desteklemesi durumunda Map ├╝stesinden gelmesiyle kar┼č─▒la┼čt─▒m! Kullanmad─▒─č─▒m Array.prototype.indexOf veya Array.prototype.includes exlcudeValues ÔÇőÔÇőa Map veya kayd─▒rma gibi a veya Object daha h─▒zl─▒ sorgulama yapar dikkat edin!


16


2014-01-28





├ľ─čenin birden fazla ├Ârne─či varsa, dizinleri bozmamaya dikkat etmek i├žin geriye do─čru bir d├Âng├╝ yapabilirsiniz.

 var myElement = "chocolate";
var myArray = ['chocolate', 'poptart', 'poptart', 'poptart', 'chocolate', 'poptart', 'poptart', 'chocolate'];

/* Important code */
for (var i = myArray.length - 1; i >= 0; i--) {
    if (myArray[i] == myElement) myArray.splice(i, 1);
}
 

Canl─▒ Demo


15