2017-09-28 2 views
-2

Tut mir leid, ich habe gerade diese Frage geändert: Ich würde gerne wissen, wie oft ich das Wort "Orange" in meinem Array habe. In diesem Beispiel "orange"> 4 mal.Zählwerte in jedem Objekt des Arrays

MyArray = [{ 
    fruit1: "Orange is blabla", 
    fruit2: "Apple blabla", 
    fruit3: "blabla Banana", 
    color1: "ORANGE" 
}, { 
    fruit4: "blabla Orange", 
    fruit5: "Apple", 
    fruit6: "Banana", 
    color2: "orange blabla" 
}]; 

var newArr = MyArray.filter(function (item) { 
    return _.values(item.xxx === "orange"; 
}); 
+0

Die Länge newArr sollte nicht arbeiten? Was ist das Problem? – Shilly

+0

Ich unterstreiche uns nicht mehr, also liege ich wahrscheinlich falsch. Müsste die Wertefunktion eine Funktion als Eingabe annehmen oder ist sie ein Objekt? – akaphenom

+0

es funktioniert nicht, weil Meine Eigenschaft "item.xxx" eine Variable ist – pifou

Antwort

0

MyArray = [{ 
 
    fruit1: "Orange is blabla", 
 
    fruit2: "Apple blabla", 
 
    fruit3: "blabla Banana", 
 
    color1: "ORANGE" 
 
}, { 
 
    fruit4: "blabla Orange", 
 
    fruit5: "Apple", 
 
    fruit6: "Banana", 
 
    color2: "orange blabla" 
 
}]; 
 

 
var totalOrange = 0; 
 

 
MyArray.map(function(item) { 
 
    for (var key in item) { 
 
    if (item[key].toLowerCase().indexOf('orange') >= 0) { 
 
     totalOrange++; 
 
    } 
 
    } 
 
}); 
 
console.log(totalOrange);

+0

Danke! Ich habe meine Frage geändert, weil ich etwas vergessen ... – pifou

+0

MyArray = [{ fruit1: "Orange ist blabla", fruit2: "Apple-blabla", fruit3: "blabla Banana", color1: "ORANGE" } , { fruit4: "blabla Orange", fruit5: "Apfel", fruit6: ​​"Banane", color2: "orange blabla" }]; – pifou

+0

Es ist das gleiche, ersetzen Sie einfach das MyArray. – JiangangXiong

1

Sie können es in der folgenden Art und Weise tun

let MyArray = [{fruit1:"Orange", fruit2:"Apple", fruit3:"Banana", color1:"ORANGE"},{fruit4:"Orange", fruit5:"Apple", fruit6:"Banana", color2:"orange"}]; 
 

 
let result = MyArray.reduce((a, b) => { 
 
    for(let key of Object.keys(b)){ 
 
     let re = /orange/gi; 
 
     if(b[key].match(re) != null){ 
 
      a++; 
 
     } 
 
    } 
 
    return a; 
 
}, 0); 
 

 
console.log(result);

+0

Danke! Ich habe meine Frage geändert, weil ich etwas vergessen ... – pifou

+0

die Antwort bearbeitet – marvel308

+0

MyArray = [{ fruit1: "Orange ist blabla", fruit2: "Apple-blabla", fruit3: "blabla Banana", color1: " ORANGE“ }, { fruit4: "blabla Orange", fruit5: "Apple", fruit6: ​​"Banana", color2: "orange blabla" }]; – pifou

0

Sie können so etwas tun: -

const count = MyArray.reduce((count,item)=>{ 
    Object.keys(item).forEach((val)=>{ 
     if(item[val].toLowerCase().indexOf('orange') != -1){ 
     count++; 
     } 
    }) 
    return count 
    },0) 
+0

Vielen Dank! Ich habe meine Frage geändert, weil ich etwas vergessen habe ... – pifou

+0

MyArray = [{fruit1: "Orange ist blabla", fruit2: "Apple blabla", fruit3: "blabla Banana", color1: "ORANGE"}, {fruit4: " blabla Orange ", fruit5:" Apfel ", fruit6:" Banane ", color2:" orange blabla "}] – pifou

0

Mit ES6 können Sie diese Spread-Syntax ... und Object.values zu tun verwenden.

var MyArray = [{ fruit1: "Orange is blabla", fruit2: "Apple blabla", fruit3: "blabla Banana", color1: "ORANGE" }, { fruit4: "blabla Orange", fruit5: "Apple", fruit6: "Banana", color2: "orange blabla" }] 
 

 
var count = [].concat(...MyArray.map(Object.values)) 
 
\t  .filter(e => e.toLowerCase().includes('orange')) 
 
       .length; 
 
       
 
console.log(count)

+0

MyArray = [{fruit1:" Orange ist blabla ", fruit2:" Apple blabla ", fruit3:" blabla Banana " , color1: "ORANGE"}, {fruit4: "blabla Orange", fruit5: "Apfel", fruit6: ​​"Banane", color2: "orange blabla"}] – pifou

+0

@pifou Meine Antwort wurde aktualisiert. –

+0

danke! Es ist Arbeit – pifou

0

Ich denke, so etwas wie dies funktionieren könnte. Sie könnten es in einer großen Schleife tun, um es etwas schneller zu machen, aber diese Form in lesbarer imho.

const amountOfOranges = MyArray 
    // transform each object into an array of its values 
    .map(Object.values) 
    // remove all values not named 'orange' 
    .map(ary => ary.filter(value => value === 'orange')) 
    // replace all arrays by their length 
    .map(ary => ary.length) 
    // sum the results 
    .reduce((x, y) => x + y, 0); 
+0

Danke!Ich habe meine Frage geändert, weil ich etwas vergessen habe ... – pifou

+0

MyArray = [{fruit1: "Orange ist blabla", fruit2: "Apple blabla", fruit3: "blabla Banana", color1: "ORANGE"}, {fruit4: " blabla Orange ", fruit5:" Apfel ", fruit6:" Banane ", color2:" orange blabla "}] – pifou

0
var MyArray = [{fruit1:"Orange", fruit2:"Apple", fruit3:"Banana", color1:"ORANGE"},{fruit4:"Orange", fruit5:"Apple", fruit6:"Banana", color2:"orange"}]; 

var count = 0; 
MyArray.map(function(item,index){ 
    Object.keys(item).map(function(key){ 
     if(item[key].toLowerCase().indexOf('orange') >= 0){ 
      count++; 
     } 
    }); 
}); 
console.log(count); 
+0

Danke! Ich habe meine Frage geändert, weil ich etwas vergessen habe ... – pifou

+0

@pifou hat meine Antwort bearbeitet –

+0

MyArray = [{fruit1: "Orange ist blabla", fruit2: "Apple blabla", fruit3: "blabla Banana", color1: "ORANGE" }, {fruit4: "blabla Orange", fruit5: "Apfel", fruit6: ​​"Banane", color2: "orange blabla"}] – pifou

Verwandte Themen