Saya memiliki serangkaian objek Json yang mencantumkan topping pesanan pizza. Saya ingin menggunakan Angular untuk menampilkan 20 kombinasi urutan paling umum dari topping dan memberi peringkat dari 1-20. Sejauh ini saya hanya dapat menggunakan array sampel dasar (bukan array objek json saya) untuk menampilkan jumlah kemunculan dalam array dan menampilkannya dalam javascript. (Jauh sekali saya tahu) Bagaimana saya bisa mencapai ini atau setidaknya mendapatkan awal yang baik ke arah yang benar?

Json Array objek yang saya ingin ini berfungsi

//it is much bigger than this but shortened it for brevity 
[{
        "toppings": [
            "pepperoni"
        ]
    },
    {
        "toppings": [
            "feta cheese"
        ]
    },
    {
        "toppings": [
            "pepperoni"
        ]
    },
    {
        "toppings": [
            "bacon"
        ]
    },
    {
        "toppings": [
            "sausage",
            "beef"
        ]
    }
]

Non json dan array yang sangat mendasar yang saya mulai dengan baik

var arr = [2, 2, 2, 2, 2, 4, 5, 5, 5, 9];

function foo(arr) {
    var a = [], b = [], prev;

    arr.sort();
    for ( var i = 0; i < arr.length; i++ ) {
        if ( arr[i] !== prev ) {
            a.push(arr[i]);
            b.push(1);
        } else {
            b[b.length-1]++;
        }
        prev = arr[i];
    }

    return [a, b];
}

var result = foo(arr);
document.write('[' + result[0] + ']<br>[' + result[1] + ']')   
//currently writes [2,4,5,9] [5,1,3,1] 2 appears 5 times , 4 appears 1 time etc.

Singkatnya saya ingin memiliki output dengan Ngfor yang mengulang melalui array kemunculan yaitu (Dalam contoh ke-2 saya variabel huruf b [5,1,3,1]) dan array objek json asli (array bersarang di bagian atas halaman ) dan memetakan keduanya bersama-sama untuk mengurutkannya dari yang paling banyak ke yang paling kecil. Bantuan apa pun akan dihargai.

0
evan 11 April 2020, 23:17

1 menjawab

Jawaban Terbaik

Anda dapat memodifikasi kode Anda untuk membuat hasilnya seperti pasangan key value :

function foo(arr) {
var a = [], b = [], prev;

arr.sort();
for ( var i = 0; i < arr.length; i++ ) {
    if ( arr[i] !== prev ) {
        a.push(arr[i]);
        b.push(1);
    } else {
        b[b.length-1]++;
    }
    prev = arr[i];
}
  let result = [];
  a.forEach((item,i)=>{  
        let obj = { key : item , value : b[i] }; 
        result.push(obj);   
       })
  
    return result.sort(function(a, b) {
     return  b.value - a.value;
});
   
 }

let x = [{
        "toppings": [
            "pepperoni"
        ]
    },
    {
        "toppings": [
            "feta cheese"
        ]
    },
    {
        "toppings": [
            "pepperoni"
        ]
    },
    {
        "toppings": [
            "bacon"
        ]
    },
    {
        "toppings": [
            "sausage",
            "beef"
        ]
    }
];

let obj = {"toppings" : []};
x.forEach((el)=>{
   obj.toppings = obj.toppings.concat(el.toppings);
});

var result = foo( obj.toppings);

console.log(result)

Sekarang di file component.html , Anda dapat mengulangi seperti di bawah ini:

<div *ngFor="let item of result">
    <p> {{item.key}} appears {{item.value}} {{(item.value>1)? 'times' : 'time'}}
</div>

Ini demonya : demo

0
programoholic 12 April 2020, 08:37