Business = {
1: { Country: "France" },
2: { Country: "France" },
3: { Country: "UnitedKingdom" },
4: { Country: "France" }
}
我有一個企業(分配ID)的對象列表,每個企業都有自己的國家。基於屬性計算對象中物品的總數
我的問題是通過屬性找到金額的最佳方法是什麼?例如,如果我想查找法國企業的總數,它將根據代碼示例返回3。
Business = {
1: { Country: "France" },
2: { Country: "France" },
3: { Country: "UnitedKingdom" },
4: { Country: "France" }
}
我有一個企業(分配ID)的對象列表,每個企業都有自己的國家。基於屬性計算對象中物品的總數
我的問題是通過屬性找到金額的最佳方法是什麼?例如,如果我想查找法國企業的總數,它將根據代碼示例返回3。
你可以嘗試這樣的事:
var Business = {
1: {Country:"France"}
, 2: {Country:"United Kingdom"}
, 3: {Country:"France"}
, 4: {Country:"France"}
};
var businessInFrance = Object.keys(Business)
.map(key => Business[key])
.reduce(function(acc, val){
return val.Country === "France"
? acc+=1
: acc;
},0);
console.log(businessInFrance);
Object.keys(Business)
返回與可枚舉的數組Business
擁有map
適用我們傳遞到上一步驟的輸出的功能,並返回一個新的數組。此數組的元素是業務的值reduce
應用我們爲上一步的數組的每個元素傳遞的函數,並且當Country
屬性的值等於「France」時,我們將值加1的累加器,acc
,否則我們不改變。然後返回累加器的值。您的對象有問題。你可以使用以下,但我不得不問,爲什麼不使用一個數組?
Business = {
01: {Country:"France"},
02: {Country:"United Kingdom"},
03: {Country:"France"},
04: {Country:"France"},
}
const BusinessArray = [
{Country:"France"},
{Country:"United Kingdom"},
{Country:"France"},
{Country:"France"},
]
console.log(
BusinessArray.filter(x => x.Country === 'France').length
)
Business = {
01: {Country:"France"},
02: {Country:"United Kingdom"},
03: {Country:"France"},
04: {Country:"France"},
}
const countriesCount = (country, businesses) =>
Object.keys(businesses)
.filter(x => businesses[x].Country === country)
.length
console.log(
countriesCount('France', Business),
countriesCount('United Kingdom', Business)
)
「過濾器」對我來說最有意義,我也許是最高性能的人。 – unitario
首先,您的語法不正確,將導致錯誤。
如果包含在陣列中的所有對象,你就不會要的對象保持自己的標識,你可以做到這一點很容易:
var business = [
{country:"France"},
{country:"United Kingdom"},
{country:"France"},
{country:"France"}
];
console.log("The amount of countries is: " + business.length);
var count = 0;
business.forEach(function(value){
count = (value.country === "France") ? ++count : count;
});
console.log("The amount of times France appears is: " + count);
你可以使用一個計數國家的對象。
var business = { 1: { Country: "France" }, 2: { Country: "France" }, 3: { Country: "UnitedKingdom" }, 4: { Country: "France" } },
count = Object.keys(business).reduce(function (r, k) {
var country = business[k].Country;
r[country] = (r[country] || 0) + 1;
return r;
}, Object.create(null));
console.log(count.France);
console.log(count);
.as-console-wrapper { max-height: 100% !important; top: 0; }
謝謝妮娜,這是我的最終目標。我需要進一步研究Object.keys – epayne
Object.keys
返回對象的密鑰。您可以循環鍵並計算您想要的結果。下面是一個例子..
var Business = {
1:{
Country: "France"
},
2:{
Country: "France"
},
3:{
Country: "UnitedKingdom"
},
4:{
Country: "France"
}};
var countByCountry = function(country){
var result = 0;
Object.keys(Business).forEach(function(it){
result += (Business[it].Country === country ? 1 : 0);
console.log(it, country, result);
});
return result;
}
console.log(countByCountry('France'));
你的數據是無效的。你有一個數組還是一個對象? –
對不起,這是一個對象 – epayne