Saya memiliki kumpulan data yang mengembalikan array objek dan saya ingin memfilter salah satu objek yang memiliki nilai yang sama pada kunci nama. Contoh kecil dari data yang dikembalikan:

{
    "product_id": 8432,
    "name": "Coca Cola",
    "size: "500ml",    
    "brewer": "Coke"
},
{
    "product_id": 1641,
    "name": "Coca Cola",
    "size: "355ml", 
    "brewer": "Coke"
},
{
    "product_id": 1010,
    "name": "Pepsi",
    "size": "355ml",    
    "brewer": "Pepsi Cola"
},
{
    "product_id": 5199,
    "name": "Sprite",
    "size": "500ml",    
    "brewer": "Coke"
}

Jadi salah satu dari Coca Cola itu tidak boleh dikembalikan. Saya kemudian meneruskan array itu ke dalam komponen yang memetakan untuk menampilkan data.

Saya tidak bisa seumur hidup memikirkan untuk menyaring nama duplikat. Saya sudah mencoba .filter tetapi tidak dapat menemukan logika di dalamnya, saya sudah mencoba Set tetapi itu baru bagi saya.

Ada yang punya ide? Berikut fungsi panggilan:

getDrinks = () => {
      const data = await fetch(this.state.url);
      let newData= await data.json();
      newData.length = 10; //the returned data is thousands long and I only want 10 displayed.

      this.setState({
        drinks: jsonData,
      });
  }
0
vysearcadia 29 Oktober 2019, 21:57

3 jawaban

Jawaban Terbaik

Anda ingin melacak nama yang telah Anda lihat saat Anda mengulangi. Jadi sesuatu seperti ini:

// A set of names that have occurred.
const names = new Set();
// Filter the data to remove duplicate names.
const result = data.filter(({ name ) => {
    // If the name has occurred already, skip it.
    if (names.has(name)) {
        return false;
    }
    // Otherwise, add it the set of names and keep it.
    names.add(name);
    return true;
});
0
kylepixel 29 Oktober 2019, 19:08

Bagaimana dengan sesuatu yang seperti ini?

const data = await fetch(this.state.url);
const jsonData = await data.json();

var filteredData = [];
jsonData.forEach(drink => {
  if(!filteredData.some(x=>x.name == drink.name)){
    filteredData.push(drink);
  }
})
0
stackoverfloweth 29 Oktober 2019, 19:03

Coba gunakan metode reduce:

const sourceData = [{
  "product_id": 574031,
  "name": "Coca Cola",
  'size': '500ml',
  "brewer": "Coke"
},
{
  "product_id": 574042,
  "name": "Coca Cola",
  "size": "355ml",
  "brewer": "Coke"
},
{
  "product_id": 7888172,
  "name": "Pepsi",
  "size": "355ml",
  "brewer": "Pepsi Cola"
},
{
  "product_id": 4359922,
  "name": "Sprite",
  "size": "500ml",
  "brewer": "Coke"
}];


const uniqueObjects = sourceData.reduce((a, c) => {
  Object.assign(a, {[c.name]: c});
  return a;
}, {});

const unique = Object.values(uniqueObjects);
console.log(unique);
0
StepUp 29 Oktober 2019, 19:24