簡體   English   中英

如何從多個嵌套對象中計算特定值的對象數?

[英]How do I count the number of objects a specific value from mutliple nested objects?

 var foodwebsites = { "bacon": [{ "url": "stackoverflow.com", }], "icecream": [{ "url": "example.com", }], "cheese": [{ "url": "example.com", }] } var baconfoodwebsites = foodwebsites.bacon.filter(function(elem) { return elem.url == 'example.com'; }).length; var icecreamfoodwebsites = foodwebsites.icecream.filter(function(elem) { return elem.url == 'example.com'; }).length; var cheesefoodwebsites = foodwebsites.cheese.filter(function(elem) { return elem.url == 'example.com'; }).length; var allfoodwebsites = baconfoodwebsites + icecreamfoodwebsites + cheesefoodwebsites; console.log(baconfoodwebsites, icecreamfoodwebsites, cheesefoodwebsites, allfoodwebsites) 

我想做同樣的事情,而不必重復所有這些單獨的嵌套對象(培根,冰淇淋和奶酪)。

我認為答案將是:

var allfoodwebsites = foodwebsites=.filter(function( elem) {
    return elem.url == 'example.com';
}).length;

附加信息:

如果可能的話,我只想使用jQuery + Pure Javascript。

我想找到所有帶有"url": "example.com"嵌套對象"url": "example.com"

最好的選擇是reduce計數方法的功能。

 let foodwebsites = {"bacon": [{"url": "stackoverflow.com",}],"icecream": [{"url": "example.com",}],"cheese": [{"url": "example.com",}]}; let allfoodwebsites = Object.values(foodwebsites). reduce((a, array) => a + array. reduce((a, {url}) => a + (url === "example.com"), 0), 0); console.log(allfoodwebsites); 

使用Object.values,Array#reduce()和Array#flat()。 注意flat()在某些環境中可能需要polyfill

 let foodwebsites = {"bacon": [{"url": "stackoverflow.com",}],"icecream": [{"url": "example.com",}],"cheese": [{"url": "example.com",}]}; const getUrlCount = (url) => { return Object.values(foodwebsites) .flat() .reduce((a, {url:u})=> a + (url === u) , 0) } console.log(getUrlCount("example.com")) 

解:

您可以創建一個函數,該函數將迭代對象鍵並在每個訪問鍵的子對象數組中搜索propertyvalue

let amount = (p, v, i = 0) => 
(Object.keys(foodwebsites).forEach(k => foodwebsites[k].forEach(o => o[p] === v && i++))
, i);

可以這樣使用:

amount("url", "example.com"); // 2

工作代碼段:

 var foodwebsites = { "bacon": [{ "url": "stackoverflow.com", }], "icecream": [{ "url": "example.com", }], "cheese": [{ "url": "example.com", }] } let amount = (p, v, i = 0) => (Object.keys(foodwebsites).forEach(k => foodwebsites[k].forEach(o => o[p] === v && i++)) , i); console.log( amount("url", "example.com") ); //2 

我實際上建立了所有這些嵌套條目的一個數組:

  const sites = Object.values(foodwebsites).flat();

然后,您可以輕松地對其進行迭代並計算所有鍵:

 const count = (arr, key, value) => arr.reduce((acc, it) => acc + it[key] === value, 0);

 console.log(
   count(sites, "url", "example.com"),
   count(sites, "url", "stackoverflow.com")
 );

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM