javascript操作对象:映射

javascript操作对象:映射,javascript,Javascript,我需要过滤一个新的对象countries,只过滤人口低于10亿的国家。我在地图部分使用:return{key:countries[key]}。我认为这是不对的,我怎样才能建立一个新的对象?我必须用推之类的东西吗 var countries = { China: 1371980000, India: 1276860000, 'United States': 321786000, Indonesia: 255461700, Brazil: 204873000,

我需要过滤一个新的对象countries,只过滤人口低于10亿的国家。我在地图部分使用: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);
var国家={
中国:137198万,
印度:1276860000,
“美国”:321786000,
印度尼西亚:255461700,
巴西:204873000,
巴基斯坦:190860000
};
var countriesFiltered=Object.key(国家)。filter(函数(键){

返回国[键]尝试使用以下功能:

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);
Object.filter=(obj,谓词)=>
对象键(obj)
.filter(key=>谓词(obj[key]))
.reduce((res,key)=>(res[key]=obj[key],res),{});

var filtered=Object.filter(countrie,countrie=>countrie我不是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);
如果需要键值对数组,可以尝试

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);
关闭!只需使用而不是
Array.map
。除非使用ES2015,否则对象属性名称无法更改。因此,您需要使用
reduce
构建新对象,然后分别指定每个属性

var国家={
中国:137198万,
印度:1276860000,
“美国”:321786000,
印度尼西亚:255461700,
巴西:204873000,
巴基斯坦:190860000
};
var countriesFiltered=Object.key(国家)。filter(函数(键){

return countries[key]我会尽力理解你的问题,而不是给你一个不同的解决方案。实际上,如果你想在javascript对象中指定一个变量作为键,有一种不同的方法。例如

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);
这将导致一个错误

这是你的答案

    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);
var国家={
中国:137198万,
印度:1276860000,
“美国”:321786000,
印度尼西亚:255461700,
巴西:204873000,
巴基斯坦:190860000
};
var countriesFiltered=Object.key(国家)。filter(函数(键){

返回国家[键]对象只有唯一的键。因此,如果您的国家将是唯一的,则可以使用以下代码:

var国家={
中国:137198万,
印度:1276860000,
“美国”:321786000,
印度尼西亚:255461700,
巴西:204873000,
巴基斯坦:190860000
};
var countriesFiltered={};
用于(国家/地区中的var国家/地区){


如果(countries[country]嗯,在运行您的代码后,我得到一个带有筛选国家的对象。您想做什么?我需要类似的结果;var countries filtered={美国:321786000,印度尼西亚:255461700,巴西:204873000,巴基斯坦:190860000};添加了一个答案和一把小提琴。这确实可以做到,但它不会真正重复使用,因为它使用了非常硬的编码来使用countries objecti正在寻找一个没有使用的解决方案:var countries Filtered={};我需要一个对象,而不是数组,我正在研究你的解决方案,thanks@stackdave如果运行第一个解决方案,它将返回一个对象,第二个解决方案将返回一个数组。@James111同意它是不可重用的。但是没有在OP中指定它。:)我在哪里能读到它的确切含义是什么?我不建议修改.origina示例的本机
对象
;只建议修改:返回国[key]@JasonCust我不太了解;当时的解决方案不好?使用Object.filter,是否正在修改本机对象?@JasonCust-这不会影响筛选方法本身。它不会破坏当前的任何功能。这实际上并没有为OPPL提供解决方案解释这无法回答James您的示例返回的问题一个对象数组你在我的初始评论后更改了答案,但它仍然不能满足OP的要求。相反,这是返回一个对象数组,而不是一个带有key+值的对象。抱歉!!!我的错!!我刚刚添加了reduce after映射。在后期堆栈中,Dave错误地将变量key赋值解释为一个对象。只是特德澄清了这一点。我想它已经得到了回答。谢谢你指出它,詹姆斯!!你的评论投一票!对不起,我正在寻找一个带有。键和地图之类的解决方案that@stackdave请检查更新的版本;您能给我一个ES2015的解决方案吗?thanks@stackdave我用计算出的名字更新了答案perty方法以及一个有趣的小例子,可能会扩大您对JavaScript的接触。尽情享受吧!
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);
    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);