Başka bir diziden sağlanan belirli bir anahtar için nesnelerin ara dizisi

oy
0

I yapısına sahip bir nesne vardır:

[
    {
        id: NONSTOPS,
        label: Nonstop,
        value: no
    },

    {
        id: REWARDS,
        label: Rewards,
        value: no
    },

    {
        id: SEAT,
        label: Seats,
        value: no
    },

    {
        id: BAGS,
        label: Bags,
        value: no
    }
]

ve bir yapı ile bir dizi

[NONSTOPS, REWARDS]

Geri vermek

[
    {
        id: NONSTOPS,
        label: Nonstop,
        value: yes
    },

    {
        id: REWARDS,
        label: Rewards,
        value: yes
    },

    {
        id: SEAT,
        label: Seats,
        value: no
    },

    {
        id: BAGS,
        label: Bags,
        value: no
    }
]

dizide dayanarak, nesneyi arama ve dizideki bir kimlik vardır evet ise değerini değiştirecektir.

İşte benim kod şimdiye kadar var

for(let i=0; i< obj.length; i++){
  for(let j = 0; j<array.length; j++){
    if(obj[i].id === array[j]){
      obj[i].value ='yes'
    }
  }
}

Bir şey benim koduyla ilgili kapalı görünüyor ve belki bazı tür bir Haritacıyla Bunu yapmak için daha kolay bir yolu olup olmadığını merak ediyorum?

Oluştur 10/10/2019 saat 01:01
kaynak kullanıcı
Diğer dillerde...                            


4 cevaplar

oy
1

Muhtemelen kullanabilir .forEachve bir indexOfDizinizdeki çeki (sadece daha anlaşılır olması için, yanlış bir şey sizin yaklaşımla yoktur)

obj.forEach(o => {
    if (array.indexOf(o.id) > -1) o.value = "yes";
});
Cevap 10/10/2019 saat 01:03
kaynak kullanıcı

oy
0

Basit kullanabilirsiniz for of loopnesnelerin diziyi sürekli tekrarlanması ve daha sonra yerleşik kontrol içerir değer düz dizide varsa işlevi.

const arr = [
    {
        "id": "NONSTOPS",
        "label": "Nonstop",
        "value": "no"
    },

    {
        "id": "REWARDS",
        "label": "Rewards",
        "value": "no"
    },

    {
        "id": "SEAT",
        "label": "Seats",
        "value": "no"
    },

    {
        "id": "BAGS",
        "label": "Bags",
        "value": "no"
    }
]

const arrToCompare = ["NONSTOPS", "REWARDS"]

for (let obj of arr) {
  // you can use includes to find is the value exist in the arrToCompare
  if (arrToCompare.includes(obj.id)) {
    // if exists then mutate it
    obj.value = 'yes';
  }
}

console.log(JSON.stringify(arr, null, 4));

Cevap 10/10/2019 saat 08:54
kaynak kullanıcı

oy
0

Kullanabilirsiniz includes

const data = [{
    "id": "NONSTOPS",
    "label": "Nonstop",
    "value": "no"
},

    {
        "id": "REWARDS",
        "label": "Rewards",
        "value": "no"
    },

    {
        "id": "SEAT",
        "label": "Seats",
        "value": "no"
    },

    {
        "id": "BAGS",
        "label": "Bags",
        "value": "no"
    }
]


const lookup = ["NONSTOPS", "REWARDS"];

const reduced = data.map(d => {
    return {id: d.id, label: d.label, value: lookup.includes(d.id) ? "YES" : "NO"}
});
console.log(reduced);

Cevap 10/10/2019 saat 01:10
kaynak kullanıcı

oy
-1

Soruda size geçerli unsurları dönmek istiyorum belirtmiştik. Sen kullanabilirsiniz filter()aynı için.

   var result = obj.filter(o => (array.indexOf(o.id) > -1) );
Cevap 10/10/2019 saat 01:09
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more