我需要获得一个新的对象countryFiltered,过滤只有十亿人口的国家。我在地图部分使用:return {key:countries [key]}。我认为不正确,我如何建立一个新的对象?我必须使用推或类似的东西?
var countries = {
China: 1371980000,
India: 1276860000,
'United States': 321786000,
Indonesia: 255461700,
Brazil: 204873000,
Pakistan: 190860000
};
var countriesFiltered = Object.keys(countries).filter(function(key) {
return countries[key] <= 1000000000;
}).map(function(key) {
return { key : countries[key]};
});
console.log(countriesFiltered);
答案 0 :(得分:3)
关闭!只需使用Array.reduce
代替Array.map
即可。除非您使用ES2015,否则对象属性名称不能为computed。因此,您需要使用reduce
构造一个新对象,然后单独分配每个属性。
var countries = {
China: 1371980000,
India: 1276860000,
'United States': 321786000,
Indonesia: 255461700,
Brazil: 204873000,
Pakistan: 190860000
};
var countriesFiltered = Object.keys(countries).filter(function(key) {
return countries[key] <= 1000000000;
}).reduce(function(obj, key) {
// Assign key/val to new object
obj[key] = countries[key];
return obj;
}, {});
document.write('<pre>' + JSON.stringify(countriesFiltered, null, 2) + '</pre>');
&#13;
编辑:使用ES2015计算出的名称属性如下所示。 请注意,这仅适用于支持的浏览器。
var countries = {
China: 1371980000,
India: 1276860000,
'United States': 321786000,
Indonesia: 255461700,
Brazil: 204873000,
Pakistan: 190860000
};
var countriesFiltered = Object.keys(countries).filter(function(key) {
return countries[key] <= 1000000000;
}).reduce(function(obj, key) {
// Create object with computed property name
// and assign to obj
return Object.assign(obj, {
[key]: countries[key]
});
}, {});
document.write('<pre>' + JSON.stringify(countriesFiltered, null, 2) + '</pre>');
&#13;
奖励:为了好玩,您可以使用replacer
功能来利用JSON.stringify
的功能来过滤对象。虽然它确实表明有很多不同的方法来解决这个问题,但我不推荐这种方法。
var countries = {
China: 1371980000,
India: 1276860000,
'United States': 321786000,
Indonesia: 255461700,
Brazil: 204873000,
Pakistan: 190860000
};
var countriesFiltered = JSON.parse(JSON.stringify(countries, filterCountries));
function filterCountries(key, val) {
if (val > 1000000000) {
return undefined;
}
return val;
}
document.write('<pre>' + JSON.stringify(countriesFiltered, null, 2) + '</pre>');
&#13;
答案 1 :(得分:0)
尝试使用以下功能:
Object.filter = (obj, predicate) =>
Object.keys(obj)
.filter(key => predicate(obj[key]))
.reduce((res, key) => (res[key] = obj[key], res), {});
var filtered = Object.filter(countries, countrie => countrie <= 1000000000);
console.log(filtered);
这应该为你做到!
答案 2 :(得分:0)
我不是100%肯定你在寻找什么,但如果你正在寻找一个新的对象,每个国家的名字都作为财产和人口,你可以尝试。
var countries = {
China: 1371980000,
India: 1276860000,
'United States': 321786000,
Indonesia: 255461700,
Brazil: 204873000,
Pakistan: 190860000
};
var countriesFiltered = {};
Object.keys(countries).filter(function(key) {
return countries[key] <= 1000000000;
}).map(function(key) {
countriesFiltered[key] = countries[key];
});
console.log(countriesFiltered);
这导致:
{
United States: 321786000,
Indonesia: 255461700,
Brazil: 204873000,
Pakistan: 190860000
}
如果你想要一组Key Value Pairs,你可以试试。
var countries = {
China: 1371980000,
India: 1276860000,
'United States': 321786000,
Indonesia: 255461700,
Brazil: 204873000,
Pakistan: 190860000
};
var countriesFiltered = Object.keys(countries).filter(function(key) {
return countries[key] <= 1000000000;
}).map(function(key) {
return { country: key, population: countries[key]};
});
console.log(countriesFiltered);
编辑:回复评论
究竟是什么意思,可以理解,在哪里可以读到这个?
如果您查看@answer-38909742,您会看到他们修改了Object
类型并添加了一个静态方法Object.filter()
,其签名为Object.filter = (obj, predicate) => {}
然后使其可重复使用,并且不限于函数的范围,而是限于任何对象。
如果将其放在应用程序某处的全局脚本中,则可以在任何范围内的任何对象上重复使用此方法。
如他的问题所述,只需致电。
Object.filter(countries, countrie => countrie <= 1000000000);
答案 3 :(得分:0)
对象只有唯一键。因此,如果您的国家/地区具有独特性,则可以使用以下代码:
var countries = {
China: 1371980000,
India: 1276860000,
'United States': 321786000,
Indonesia: 255461700,
Brazil: 204873000,
Pakistan: 190860000
};
var countriesFiltered = {};
for ( var country in countries ) {
if ( countries[country] <= 1000000000 ) {
countriesFiltered[country] = countries[country];
}
}
console.log(countriesFiltered);
答案 4 :(得分:-2)
我会尝试了解您的问题,而不是给您一个不同的解决方案。实际上,如果要将变量指定为javascript对象中的键,则有不同的方法。例如
var obj = {};
var key = 'abc';
obj[key] = 123;
您无法将变量直接指定给对象。
var key = 'abc';
var obj = {key : 123}
这会导致错误。
这是你的答案
var countries = {
China: 1371980000,
India: 1276860000,
'United States': 321786000,
Indonesia: 255461700,
Brazil: 204873000,
Pakistan: 190860000
};
var countriesFiltered = Object.keys(countries).filter(function(key) {
return countries[key] <= 1000000000;
}).map(function(key) {
var obj = {};
obj[key] = countries[key];
return obj;
}).reduce(function(prevKey, currentKey) {
return Object.assign(prevKey , currentKey);
})
console.log(countriesFiltered);
按照已经发布的相同的好帖子。 JavaScript set object key by variable