Bir dizinin JavaScript'te bir de─čer i├žerip i├žermedi─čini nas─▒l kontrol ederim?


Al─▒nan cevaba git


Bir JavaScript dizisinin bir de─čer i├žerip i├žermedi─čini ├Â─črenmenin en ├Âzl├╝ ve etkili yolu nedir?

Bunu yapman─▒n tek yolu bu:

 function contains(a, obj) {
    for (var i = 0; i < a.length; i++) {
        if (a[i] === obj) {
            return true;
        }
    }
    return false;
}
 

Bunu ba┼čarman─▒n daha iyi ve daha ├Âzl├╝ bir yolu var m─▒?

Bu ├žok yak─▒ndan y─▒─č─▒n ta┼čmas─▒ soru ile ilgilidir bir JavaScript Array bir ├Â─čeyi bulmak i├žin en iyi yolu? hangi kullanarak bir dizideki nesneleri bulma adresi indexOf .


3725





2008-10-25




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






Mevcut taray─▒c─▒lar Array#includes , tam olarak bunu yapan yayg─▒n bir ┼čekilde desteklenir ve daha eski taray─▒c─▒lar i├žin bir ├žoklu dolguna sahiptir .

 > ['joe', 'jane', 'mary'].includes('jane');
true 
 

Ayr─▒ca Array#indexOf , daha az do─črudan olan ancak eski taray─▒c─▒lar i├žin Polyfills gerektirmeyen de kullanabilirsiniz .

jQuery $.inArray , i┼člevsel olarak e┼čde─čer olan─▒ sunar Array#indexOf .

http://underscorejs.org/%23#Bir JavaScript yard─▒mc─▒ program─▒ kitapl─▒─č─▒ olan underscore.js , her ikisi de bir JavaScript dizisini ge├žerse dahili olarak indexOf kullanan dahili _.contains(list, value) takma adlar sunar . _.include(list, value) http://underscorejs.org/%23indexOf#indexOf

Di─čer baz─▒ ├žer├ževeler benzer y├Ântemler sunar:

Baz─▒ ├žer├ževelerin bunu bir i┼člev olarak uygulad─▒─č─▒na dikkat ederken, di─čerleri i┼člevi dizi prototipine ekler.


4129







2019ÔÇÖdan g├╝ncelleme: Bu cevap 2008ÔÇÖden (11 ya┼č─▒nda!) Al─▒nm─▒┼čt─▒r ve modern JS kullan─▒m─▒yla ilgili de─čildir. Vaat edilen performans iyile┼čtirme, o zaman─▒n taray─▒c─▒lar─▒nda yap─▒lan bir k─▒yaslamaya dayan─▒yordu. Modern JS y├╝r├╝tme ba─člamlar─▒ ile ilgili olmayabilir. Kolay bir ├ž├Âz├╝me ihtiyac─▒n─▒z varsa, di─čer cevaplar─▒ aray─▒n. En iyi performansa ihtiyac─▒n─▒z varsa, ilgili uygulama ortamlar─▒nda kendiniz i├žin bir k─▒yaslama yap─▒n.

Di─čerlerinin dedi─či gibi, dizideki yinelemenin muhtemelen en iyi yol oldu─ču, ancak azalan bir d├Âng├╝n├╝n JavaScript'te yinelemenin en h─▒zl─▒ yolu oldu─ču kan─▒tlanm─▒┼čt─▒r while . Yani kodunuzu a┼ča─č─▒daki gibi yeniden yazmak isteyebilirsiniz:

 function contains(a, obj) {
    var i = a.length;
    while (i--) {
       if (a[i] === obj) {
           return true;
       }
    }
    return false;
}
 

Elbette, Dizi prototipini geni┼čletmek de m├╝mk├╝nd├╝r:

 Array.prototype.contains = function(obj) {
    var i = this.length;
    while (i--) {
        if (this[i] === obj) {
            return true;
        }
    }
    return false;
}
 

Ve ┼čimdi sadece a┼ča─č─▒dakileri kullanabilirsiniz:

 alert([1, 2, 3].contains(2)); // => true
alert([1, 2, 3].contains('2')); // => false
 

399







indexOf belki, ancak "ECMA-262 standard─▒n─▒n JavaScript uzant─▒s─▒; standard─▒n di─čer uygulamalar─▒nda bulunmayabilece─činden" olabilir.

├ľrnek:

 [1, 2, 3].indexOf(1) => 0
["foo", "bar", "baz"].indexOf("bar") => 1
[1, 2, 3].indexOf(4) => -1
 

AFAICS Microsoft, yok de─čil alternatif ├že┼čit sunuyoruz Buna ancak Internet Explorer diziler (ve desteklemeyen di─čer taray─▒c─▒lara benzer i┼člevler ekleyebilirsiniz indexOf isterseniz) i├žin, bir ┼čekilde h─▒zl─▒ bir Google arama ortaya koymaktad─▒r (├Ârne─čin, bu bir ).


189


2008-10-25





ECMAScript 7 tan─▒t─▒ld─▒ Array.prototype.includes .

Bu ┼čekilde kullan─▒labilir:

 [1, 2, 3].includes(2); // true
[1, 2, 3].includes(4); // false
 

Ayr─▒ca iste─če ba─čl─▒ ikinci bir arg├╝man─▒ kabul eder fromIndex :

 [1, 2, 3].includes(3, 3); // false
[1, 2, 3].includes(3, -1); // true
 

Farkl─▒ olarak indexOf kullanan, Kat─▒ E┼čitlik Kar┼č─▒la┼čt─▒rma , includes kullanarak kar┼č─▒la┼čt─▒r─▒r SameValueZero e┼čitlik algoritmas─▒. Bu, bir dizinin bir i├žerip i├žermedi─čini tespit edebilece─činiz anlam─▒na gelir NaN :

 [1, 2, NaN].includes(NaN); // true
 

Ayr─▒ca farkl─▒ olarak indexOf , includes eksik dizinleri atlamaz:

 new Array(5).includes(undefined); // true
 

┼×u anda hala bir taslak ama t├╝m taray─▒c─▒larda ├žal─▒┼čmas─▒n─▒ sa─člamak i├žin ├žoklu doldurulabilir .


155







b de─čer ve a dizi. D├Ân├╝yor true ya da false :

 function(a, b) {
    return a.indexOf(b) != -1
}
 

106







En iyi yan─▒tlar ilkel t├╝rler varsaymaktad─▒r ancak bir dizinin baz─▒ ├Âzelliklere sahip bir nesne i├žerip i├žermedi─čini ├Â─črenmek istiyorsan─▒z , Array.prototype.some () ├žok ┼č─▒k bir ├ž├Âz├╝md├╝r:

 const items = [ {a: '1'}, {a: '2'}, {a: '3'} ]

items.some(item => item.a === '3')  // returns true
items.some(item => item.a === '4')  // returns false
 

Bu konuda g├╝zel olan ┼čey, eleman─▒n ├žok gereksiz bulunmas─▒ durumunda, yinelemenin iptal edilmesidir.

Ayr─▒ca, if bir boole d├Ând├╝rd├╝─č├╝ i├žin bir ifadeye ├žok yak─▒┼č─▒yor:

 if (items.some(item => item.a === '3')) {
  // do something
}
 

* Yorumda belirtildi─či gibi, bu cevap s─▒ras─▒nda, Eyl├╝l 2018, Array.prototype.some() tam olarak desteklenmektedir: caniuse.com destek tablosu


102







─░┼čte bir JavaScript 1.6 uyumlu bir uygulama Array.indexOf :

 if (!Array.indexOf) {
    Array.indexOf = [].indexOf ?
        function(arr, obj, from) {
            return arr.indexOf(obj, from);
        } :
        function(arr, obj, from) { // (for IE6)
            var l = arr.length,
                i = from ? parseInt((1 * from) + (from < 0 ? l : 0), 10) : 0;
            i = i < 0 ? 0 : i;
            for (; i < l; i++) {
                if (i in arr && arr[i] === obj) {
                    return i;
                }
            }
            return -1;
        };
}
 

74







kullan─▒n:

 function isInArray(array, search)
{
    return array.indexOf(search) >= 0;
}

// Usage
if(isInArray(my_array, "my_value"))
{
    //...
}
 

52







JavaScript Array nesnesini geni┼čletmek ger├žekten k├Ât├╝ bir fikir ├ž├╝nk├╝ yeni ├Âzellikleri (├Âzel y├Ântemlerinizi) for-in mevcut komut dosyalar─▒n─▒ k─▒rabilecek d├Âng├╝lere dahil ediyorsunuz . Birka├ž y─▒l ├Ânce Prototip k├╝t├╝phanesinin yazarlar─▒, bu t├╝r ┼čeyleri kald─▒rmak i├žin k├╝t├╝phane uygulamalar─▒n─▒ yeniden in┼ča etmek zorunda kald─▒lar.

Sayfan─▒zda ├žal─▒┼čan di─čer JavaScript'lerle uyumluluk konusunda endi┼čelenmenize gerek yoksa, bunun i├žin gidin, aksi takdirde, daha garip ama daha g├╝venli duran i┼člev ├ž├Âz├╝m├╝ ├Âneririm.


45


2009-08-27





Bir saniye i├žin kutunun d─▒┼č─▒nda d├╝┼č├╝nmek, bu aramay─▒ bir├žok kez yap─▒yorsan─▒z, bir karma i┼člevi kullanarak arama yapmak i├žin bir E┼čle┼čtirici dizi kullanmak ├žok daha etkilidir .

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map


29







Tek astar─▒:

 function contains(arr, x) {
    return arr.filter(function(elem) { return elem == x }).length > 0;
}
 

28







A┼ča─č─▒dakileri kullan─▒yorum:

 Array.prototype.contains = function (v) {
    return this.indexOf(v) > -1;
}

var a = [ 'foo', 'bar' ];

a.contains('foo'); // true
a.contains('fox'); // false
 

24







 function contains(a, obj) {
    return a.some(function(element){return element == obj;})
}
 

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/some5. bask─▒da ECMA-262 standard─▒na Array.prototype.some () eklendi.


21







Umar─▒m daha h─▒zl─▒ bir ├žift y├Ânl├╝ indexOf / lastIndexOf alternatif

2015

Yeni y├Ântem ├žok g├╝zel olsa da , ┼ču an i├žin destek temelde s─▒f─▒r.

Yava┼č indexOf / lastIndexOf i┼člevlerini de─či┼čtirmenin yolunu uzun zamand─▒r d├╝┼č├╝n├╝yordum.

En iyi cevaplara bakarak, zaten performans g├Âsteren bir yol bulundu. contains Bunlardan en h─▒zl─▒ olmas─▒ gereken @Damir Zekic'in yazd─▒─č─▒ i┼člevi se├žtim . Ancak ayn─▒ zamanda g├Âstergelerin 2008'den geldi─čini ve bu nedenle eski oldu─čunu da belirtiyor.

Ben de tercih while ├╝zerinde for de─čil, belirli bir nedenle ben bir for d├Âng├╝s├╝ ile i┼člev yazma sona erdi. A ile de yap─▒labilir while -- .

Bunu yaparken dizinin her iki taraf─▒n─▒ da kontrol edersem yinelemenin daha yava┼č olup olmad─▒─č─▒n─▒ merak ediyordum. G├Âr├╝n├╝┼če g├Âre hay─▒r ve bu y├╝zden en ├╝st oylananlardan iki kat daha h─▒zl─▒. A├ž─▒k├žas─▒, yerli olandan da daha h─▒zl─▒. Bu, arad─▒─č─▒n─▒z de─čerin dizinin ba┼č─▒nda m─▒ yoksa sonunda m─▒ oldu─čunu asla bilemeyece─činiz ger├žek d├╝nya ortam─▒nda.

Sadece bir diziyi bir de─čere itti─činizi bildi─činiz zaman, lastIndexOf kullanmak muhtemelen en iyi ├ž├Âz├╝m olmaya devam eder, ancak b├╝y├╝k dizilerden ge├žmek zorunda kal─▒rsan─▒z ve sonu├ž her yerde olabilirse, bu i┼čleri daha h─▒zl─▒ yapmak i├žin sa─člam bir ├ž├Âz├╝m olabilir.

├çift y├Ânl├╝ indexOf / lastIndexOf

 function bidirectionalIndexOf(a, b, c, d, e){
  for(c=a.length,d=c*1; c--; ){
    if(a[c]==b) return c; //or this[c]===b
    if(a[e=d-1-c]==b) return e; //or a[e=d-1-c]===b
  }
  return -1
}

//Usage
bidirectionalIndexOf(array,'value');
 

Performans testi

http://jsperf.com/bidirectionalindexof

Test olarak 100k giri┼čli bir dizi olu┼čturdum.

├ť├ž sorgu: ba┼č─▒nda, ortas─▒nda ve dizinin sonunda.

Umar─▒m bunu da ilgin├ž bulursunuz ve performans─▒ test edersiniz.

Not: Ben biraz de─či┼čtirilmi┼č g├Ârebilece─činiz gibi contains (yani temelde indexOf & lastIndexOf ├ž─▒k─▒┼č─▒n─▒ yans─▒tacak ┼čekilde i┼člev true ile index ve false ile -1 ). Bu ona zarar vermemeli.

Dizi prototip varyant─▒

 Object.defineProperty(Array.prototype,'bidirectionalIndexOf',{value:function(b,c,d,e){
  for(c=this.length,d=c*1; c--; ){
    if(this[c]==b) return c; //or this[c]===b
    if(this[e=d-1-c] == b) return e; //or this[e=d-1-c]===b
  }
  return -1
},writable:false, enumerable:false});

// Usage
array.bidirectionalIndexOf('value');
 

─░┼člev, do─čru veya yanl─▒┼č, hatta nesneyi, dizgiyi veya her neyse geri d├Ând├╝rmek i├žin kolayca de─či┼čtirilebilir.

Ve i┼čte while de─či┼čken:

 function bidirectionalIndexOf(a, b, c, d){
  c=a.length; d=c-1;
  while(c--){
    if(b===a[c]) return c;
    if(b===a[d-c]) return d-c;
  }
  return c
}

// Usage
bidirectionalIndexOf(array,'value');
 

Bu nas─▒l m├╝mk├╝n olabilir?

Bir dizide yans─▒yan dizini elde etmek i├žin yap─▒lan basit hesaplaman─▒n, ger├žek bir d├Âng├╝ yinelemesinden iki kat daha h─▒zl─▒ olacak kadar basit oldu─čunu d├╝┼č├╝n├╝yorum.

Her yineleme i├žin ├╝├ž kontrol yapan karma┼č─▒k bir ├Ârnek, ancak bu yaln─▒zca kodun yava┼člamas─▒na neden olan daha uzun bir hesaplama ile m├╝mk├╝nd├╝r.

http://jsperf.com/bidirectionalindexof/2


16







JavaScript 1.6 veya ├╝st├╝ kullan─▒yorsan─▒z (Firefox 1.5 veya ├╝st├╝) Array.indexOf . Aksi takdirde, orijinal kodunuza benzer bir ┼čeyle sonu├žlanaca─č─▒n─▒z─▒ d├╝┼č├╝n├╝yorum.


13







Bir dizideki bir nesnenin varl─▒─č─▒n─▒ tekrar tekrar kontrol ediyorsan─▒z, belki de ara┼čt─▒rmal─▒s─▒n─▒z.

  1. Dizinize ekleme s─▒ralama yaparak diziyi daima s─▒ral─▒ tutmak (yeni nesneleri do─čru yere koymak)
  2. G├╝ncelleme nesnelerini kald─▒r + s─▒ral─▒ ekleme i┼člemi ve
  3. ─░├žinde bir ikili arama aramas─▒ kullan─▒n contains(a, obj) .

13


2011-02-05





 function inArray(elem,array)
{
    var len = array.length;
    for(var i = 0 ; i < len;i++)
    {
        if(array[i] == elem){return i;}
    }
    return -1;
} 
 

Bulunursa dizi indeksini veya bulunmazsa -1 d├Ând├╝r├╝r


13


2012-06-27





Bu pasaj─▒ kullan─▒yoruz (nesnelerle, dizilerle, dizelerle ├žal─▒┼č─▒r):

 /*
 * @function
 * @name Object.prototype.inArray
 * @description Extend Object prototype within inArray function
 *
 * @param {mix}    needle       - Search-able needle
 * @param {bool}   searchInKey  - Search needle in keys?
 *
 */
Object.defineProperty(Object.prototype, 'inArray',{
    value: function(needle, searchInKey){

        var object = this;

        if( Object.prototype.toString.call(needle) === '[object Object]' || 
            Object.prototype.toString.call(needle) === '[object Array]'){
            needle = JSON.stringify(needle);
        }

        return Object.keys(object).some(function(key){

            var value = object[key];

            if( Object.prototype.toString.call(value) === '[object Object]' || 
                Object.prototype.toString.call(value) === '[object Array]'){
                value = JSON.stringify(value);
            }

            if(searchInKey){
                if(value === needle || key === needle){
                return true;
                }
            }else{
                if(value === needle){
                    return true;
                }
            }
        });
    },
    writable: true,
    configurable: true,
    enumerable: false
});
 

Kullan─▒m─▒:

 var a = {one: "first", two: "second", foo: {three: "third"}};
a.inArray("first");          //true
a.inArray("foo");            //false
a.inArray("foo", true);      //true - search by keys
a.inArray({three: "third"}); //true

var b = ["one", "two", "three", "four", {foo: 'val'}];
b.inArray("one");         //true
b.inArray('foo');         //false
b.inArray({foo: 'val'})   //true
b.inArray("{foo: 'val'}") //false

var c = "String";
c.inArray("S");        //true
c.inArray("s");        //false
c.inArray("2", true);  //true
c.inArray("20", true); //false
 

12







T├╝m modern taray─▒c─▒larda ├žal─▒┼čan ├ž├Âz├╝m:

 function contains(arr, obj) {
  const stringifiedObj = JSON.stringify(obj); // Cache our object to not call `JSON.stringify` on every iteration
  return arr.some(item => JSON.stringify(item) === stringifiedObj);
}
 

Kullan─▒m─▒:

 contains([{a: 1}, {a: 2}], {a: 1}); // true
 

IE6 + ├ž├Âz├╝m├╝:

 function contains(arr, obj) {
  var stringifiedObj = JSON.stringify(obj)
  return arr.some(function (item) {
    return JSON.stringify(item) === stringifiedObj;
  });
}

// .some polyfill, not needed for IE9+
if (!('some' in Array.prototype)) {
  Array.prototype.some = function (tester, that /*opt*/) {
    for (var i = 0, n = this.length; i < n; i++) {
      if (i in this && tester.call(that, this[i], i, this)) return true;
    } return false;
  };
}
 

Kullan─▒m─▒:

 contains([{a: 1}, {a: 2}], {a: 1}); // true
 

Neden kullanmak JSON.stringify ?

Array.indexOf ve Array.includes (ve buradaki cevaplar─▒n ├žo─čunda oldu─ču gibi) sadece referans ile de─čil, de─čer ile k─▒yaslay─▒n.

 [{a: 1}, {a: 2}].includes({a: 1});
// false, because {a: 1} is a new object
 

Bonus

Optimize edilmemi┼č ES6 tek astar:

 [{a: 1}, {a: 2}].some(item => JSON.stringify(item) === JSON.stringify({a: 1));
// true
 

Not: Anahtarlar─▒n ayn─▒ s─▒rada olmas─▒ durumunda, nesneleri de─čere g├Âre kar┼č─▒la┼čt─▒rmak daha iyi ├žal─▒┼čacakt─▒r; bu nedenle, g├╝venli olmas─▒ i├žin anahtarlar─▒ ├Ânce b├Âyle bir paketle s─▒ralayabilirsiniz: https://www.npmjs.com/package/sort-keys


G├╝ncel contains bir perf optimizasyonu ile i┼člevini. ─░┼čaret etti─činiz i├žin te┼čekk├╝rler .


10







Lodash'─▒n baz─▒ fonksiyonlar─▒n─▒ kullan─▒n .

K─▒sa, do─čru ve harika ├žapraz platform deste─či var.

Kabul edilen cevap, gereksinimleri bile kar┼č─▒lam─▒yor.

Gereksinimler: Bir JavaScript dizisinin bir nesne i├žerip i├žermedi─čini bulmak i├žin en ├Âzl├╝ ve etkili yolu ├Ânerin.

Kabul edilen cevap:

 $.inArray({'b': 2}, [{'a': 1}, {'b': 2}])
> -1
 

Benim ├Ânerim:

 _.some([{'a': 1}, {'b': 2}], {'b': 2})
> true
 

Notlar:

$ .inArray, bir skalar de─čerinin bir skalar dizisinde bulunup bulunmad─▒─č─▒n─▒ belirlemek i├žin iyi ├žal─▒┼č─▒r ...

 $.inArray(2, [1,2])
> 1
 

... ancak soru a├ž─▒k├ža bir nesnenin bir dizide bulunup bulunmad─▒─č─▒n─▒ belirlemenin etkin bir yolunu ister .

Hem skalarlar─▒ hem de nesneleri ele almak i├žin, ┼čunu yapabilirsiniz:

 (_.isObject(item)) ? _.some(ary, item) : (_.indexOf(ary, item) > -1)
 

9


2015-10-21





Bunu array.indexOf(x)!=-1 yapman─▒n en ├Âzl├╝ yolu olmas─▒na ra─čmen (ve Internet Explorer d─▒┼č─▒ndaki taray─▒c─▒lar taraf─▒ndan on y─▒ldan uzun s├╝redir destekleniyorlar ...), O (1) de─čil, daha ziyade O (N). Diziniz de─či┼čmeyecekse dizinizi bir karma tabloya d├Ân├╝┼čt├╝rebilirsiniz, sonra table[x]!==undefined veya ===undefined :

 Array.prototype.toTable = function() {
    var t = {};
    this.forEach(function(x){t[x]=true});
    return t;
}
 

Demo:

 var toRemove = [2,4].toTable();
[1,2,3,4,5].filter(function(x){return toRemove[x]===undefined})
 

(Ne yaz─▒k ki, bir Array.prototype.con, bir diziyi "dondurmak" ve bir karma tabloyu this._cache dosyas─▒nda iki sat─▒rda saklamakla birlikte, diziyi daha sonra d├╝zenlemeyi se├žtiyseniz yanl─▒┼č sonu├žlar verebilir. ├Ârne─čin Python'dan farkl─▒ olarak bu durumu koruman─▒za izin verin.)


8







ECMAScript 6'n─▒n bulunmas─▒ konusunda zarif bir teklifi var.

Find y├Ântemi, geri ├ža─črman─▒n ger├žek bir de─čer d├Ând├╝rd├╝─č├╝ birini bulana kadar dizideki her ├Â─če i├žin bir kez geri ├ža─č─▒rma i┼člevini y├╝r├╝t├╝r. E─čer b├Âyle bir eleman bulunursa, bul derhal o eleman─▒n de─čerini d├Ând├╝r├╝r. Aksi takdirde, tan─▒ms─▒z d├Ând├╝r├╝rleri bulun. geri ├ža─č─▒rma, yaln─▒zca atanm─▒┼č de─čerleri olan dizinin dizinleri i├žin ├ža─čr─▒l─▒r; silinmi┼č veya hi├žbir zaman de─čer atanmam─▒┼č dizinler i├žin ├ža─čr─▒lmaz.

─░┼čte bu konuda MDN belgeleri .

Bulma i┼člevi bu ┼čekilde ├žal─▒┼č─▒r.

 function isPrime(element, index, array) {
    var start = 2;
    while (start <= Math.sqrt(element)) {
        if (element % start++ < 1) return false;
    }
    return (element > 1);
}

console.log( [4, 6, 8, 12].find(isPrime) ); // Undefined, not found
console.log( [4, 5, 8, 12].find(isPrime) ); // 5
 

Fonksiyonu tan─▒mlayarak bunu ECMAScript 5 ve a┼ča─č─▒s─▒nda kullanabilirsiniz .

 if (!Array.prototype.find) {
  Object.defineProperty(Array.prototype, 'find', {
    enumerable: false,
    configurable: true,
    writable: true,
    value: function(predicate) {
      if (this == null) {
        throw new TypeError('Array.prototype.find called on null or undefined');
      }
      if (typeof predicate !== 'function') {
        throw new TypeError('predicate must be a function');
      }
      var list = Object(this);
      var length = list.length >>> 0;
      var thisArg = arguments[1];
      var value;

      for (var i = 0; i < length; i++) {
        if (i in list) {
          value = list[i];
          if (predicate.call(thisArg, value, i, list)) {
            return value;
          }
        }
      }
      return undefined;
    }
  });
}
 

7







kullan─▒n:

 var myArray = ['yellow', 'orange', 'red'] ;

alert(!!~myArray.indexOf('red')); //true
 

g├Âsteri

tilde ~ Bu noktada ne yapt─▒─č─▒n─▒ tam olarak bilmek i├žin, bu soruya bak─▒n. Bir ifadeden ├Ânce bir tilde ne yapar? .


6







Tamam, sadece sonucu almak i├žin kodunuzu optimize edebilirsiniz !

Bunu yapman─▒n daha temiz ve daha iyi olan bir├žok yolu vard─▒r, ancak sadece kal─▒b─▒n─▒z─▒ almak ve o uygulamaya uygulamak istedim JSON.stringify , sadece sizin durumunuzda b├Âyle bir ┼čey yap─▒n:

 function contains(a, obj) {
    for (var i = 0; i < a.length; i++) {
        if (JSON.stringify(a[i]) === JSON.stringify(obj)) {
            return true;
        }
    }
    return false;
}
 

5







Prototip nas─▒l yapar :

 /**
 *  Array#indexOf(item[, offset = 0]) -> Number
 *  - item (?): A value that may or may not be in the array.
 *  - offset (Number): The number of initial items to skip before beginning the
 *      search.
 *
 *  Returns the position of the first occurrence of `item` within the array &mdash; or
 *  `-1` if `item` doesn't exist in the array.
**/
function indexOf(item, i) {
  i || (i = 0);
  var length = this.length;
  if (i < 0) i = length + i;
  for (; i < length; i++)
    if (this[i] === item) return i;
  return -1;
}
 

Ayr─▒ca nas─▒l ba─čland─▒klar─▒ i├žin buraya bak─▒n .


4


2009-08-27





Bir "has ()" metoduna sahip olan Set'i kullanabilir :

 function contains(arr, obj) {
  var proxy = new Set(arr);
  if (proxy.has(obj))
    return true;
  else
    return false;
}

var arr = ['Happy', 'New', 'Year'];
console.log(contains(arr, 'Happy'));
 

4


2015-11-16





Bu numaray─▒ da kullanabilirsiniz:

 var arrayContains = function(object) {
  return (serverList.filter(function(currentObject) {
    if (currentObject === object) {
      return currentObject
    }
    else {
      return false;
    }
  }).length > 0) ? true : false
}
 

4







Bu sorunun hala en son s├Âzdizimi eklenmemi┼č olmas─▒na ┼ča┼č─▒rd─▒m, 2 kuru┼č ekleyerek.

Diyelim ki arrObj Nesneleri dizisi var ve i├žinde obj aramak istiyoruz.

Array.prototype. indexOf -> ( index veya -1 d├Ând├╝r├╝r ) genellikle dizideki ├Â─čenin dizinini bulmak i├žin kullan─▒l─▒r. Bu, nesne aramak i├žin de kullan─▒labilir, ancak yaln─▒zca ayn─▒ nesneye ba┼čvuru iletiyorsan─▒z ├žal─▒┼č─▒r.

 let obj = { name: 'Sumer', age: 36 };
let arrObj = [obj, { name: 'Kishor', age: 46 }, { name: 'Rupen', age: 26 }];


console.log(arrObj.indexOf(obj));// 0
console.log(arrObj.indexOf({ name: 'Sumer', age: 36 })); //-1

console.log([1, 3, 5, 2].indexOf(2)); //3
 

Array.prototype. i├žerir -> ( do─čru veya yanl─▒┼č d├Ând├╝r├╝r )

 console.log(arrObj.includes(obj));  //true
console.log(arrObj.includes({ name: 'Sumer', age: 36 })); //false

console.log([1, 3, 5, 2].includes(2)); //true
 

Array.prototype. find -> (geri arama al─▒r, CB'de ger├žek olan ilk de─čeri / nesneyi d├Ând├╝r├╝r).

 console.log(arrObj.find(e => e.age > 40));  //{ name: 'Kishor', age: 46 }
console.log(arrObj.find(e => e.age > 40)); //{ name: 'Kishor', age: 46 }

console.log([1, 3, 5, 2].find(e => e > 2)); //3
 

Array.prototype. findIndex -> (geri arama al─▒r, CB'de ger├žek olan ilk de─čerin / nesnenin endeksini d├Ând├╝r├╝r).

 console.log(arrObj.findIndex(e => e.age > 40));  //1
console.log(arrObj.findIndex(e => e.age > 40)); //1

console.log([1, 3, 5, 2].findIndex(e => e > 2)); //1
 

Find ve findIndex bir geri ├ža─čr─▒ ald─▒─č─▒ndan, ger├žek ko┼čulu yarat─▒c─▒ bir ┼čekilde ayarlayarak herhangi bir nesneyi (referans olmasa bile) diziden getirebiliriz.


4







kullan─▒n:

 Array.prototype.contains = function(x){
  var retVal = -1;

  // x is a primitive type
  if(["string","number"].indexOf(typeof x)>=0 ){ retVal = this.indexOf(x);}

  // x is a function
  else if(typeof x =="function") for(var ix in this){
    if((this[ix]+"")==(x+"")) retVal = ix;
  }

  //x is an object...
  else {
    var sx=JSON.stringify(x);
    for(var ix in this){
      if(typeof this[ix] =="object" && JSON.stringify(this[ix])==sx) retVal = ix;
    }
  }

  //Return False if -1 else number if numeric otherwise string
  return (retVal === -1)?false : ( isNaN(+retVal) ? retVal : +retVal);
}
 

Gitmenin en iyi yolu olmad─▒─č─▒n─▒ biliyorum, ancak nesneler aras─▒nda etkile┼čime ge├žmenin do─čal bir yolu olmad─▒─č─▒ndan, bir dizideki iki varl─▒─č─▒ kar┼č─▒la┼čt─▒rmak i├žin olabildi─čince yak─▒n oldu─čunu tahmin ediyorum. Ayr─▒ca, Array nesnesini geni┼čletmek yap─▒lacak ak─▒ll─▒ca bir ┼čey olmayabilir, ancak bazen sorun yok (e─čer onun ve takas─▒n fark─▒ndaysan─▒z).


3







Hi├žbir ┼čekilde en iyisi de─čil, ama sadece yarat─▒c─▒ oluyordum ve repertuar─▒na ekliyordum.

Bunu kullanmay─▒n

 Object.defineProperty(Array.prototype, 'exists', {
  value: function(element, index) {

    var index = index || 0

    return index === this.length ? -1 : this[index] === element ? index : this.exists(element, ++index)
  }
})


// Outputs 1
console.log(['one', 'two'].exists('two'));

// Outputs -1
console.log(['one', 'two'].exists('three'));

console.log(['one', 'two', 'three', 'four'].exists('four')); 


3



─░lgili yay─▒nlar


Javascript'te bir Nesneler Dizisi'ni nas─▒l klonlars─▒n─▒z?

C dizesinde bir dizi dizini nas─▒l olu┼čturabilirim?

─░ki dizinin JavaScript ile e┼čit olup olmad─▒─č─▒ nas─▒l kontrol edilir? [├žift]

Bir nesnenin JavaScript'te herhangi bir ├Âzelli─či olup olmad─▒─č─▒ nas─▒l kontrol edilir?

Bir dizi alan─▒n─▒n MongoDB'de benzersiz bir de─čer veya ba┼čka bir dizi i├žerip i├žermedi─či nas─▒l kontrol edilir?

Bir dizi de─čerinin olup olmad─▒─č─▒n─▒ nas─▒l kontrol edebilirim?

├ľ─čenin Javascript'te herhangi bir ├žocu─ču olup olmad─▒─č─▒n─▒ nas─▒l kontrol edebilirim?

Bir nesnenin C# ile serile┼čtirilebilir olup olmad─▒─č─▒n─▒ kontrol etme

A├ž─▒sal 2'de TypeScript i├žeren bir diziyi nas─▒l filtreleyebilirim?

C'de bir dizi yap─▒y─▒ nas─▒l yap─▒yorsunuz?

Etiketle ilgili di─čer sorular [javascript]


Unwind sefilleri ne i├žindir ve bunlar─▒ nas─▒l kullan─▒yorsunuz?

Olu┼čturulduktan sonra giri┼če oda─č─▒ ayarla

Uygulama Aktar─▒m─▒ G├╝venli─či politikas─▒ g├╝venli bir ba─člant─▒n─▒n kullan─▒lmas─▒n─▒ gerektirdi─činden kaynak y├╝klenemedi

Ta┼č─▒nma i┼člemi tamamland─▒ (ancak itilmedi), ├žekimden sonra yeni bir dalda de─či┼čiklik yap─▒ld─▒

Ge├žerli kullan─▒c─▒ i├žin ge├žici klas├Âr nas─▒l al─▒n─▒r

Google Haritalar'da iki nokta aras─▒ndaki mesafeyi hesaplay─▒n V3

Web sayfas─▒n─▒ kaydedilmemi┼č de─či┼čikliklerle ayr─▒lmadan ├Ânce kullan─▒c─▒y─▒ uyar

MySQL'da datetime eklerken PHP date () format─▒

Java'da AtomicReference ne zaman kullan─▒l─▒r?

Kaynaktan bir bitmap nas─▒l ayarlan─▒r