Javascript:如何有条件地使用Object.keys()将特定键推送到数组中?

时间:2017-04-04 00:17:54

标签: javascript

我有一个对象,让我们说:

var stateValues = {
  CA: 423,
  MI: 90,
  IL: 200,
  OH: 56,
}

如果它们的值低于100,我想只将缩写状态放入数组中。我使用forEach()结合Object.keys来尝试这样做。你能看看我的代码并告诉我我做错了什么吗?请告诉我有关函数式编程的方法,因为我必须使用函数式编程来解决这个问题。

这是我的尝试:



var stateValues = {
  CA: 423,
  MI: 90,
  IL: 200,
  OH: 56,
}

function lowState(state) {
  if (stateValues[state] < 100000) {
    return Object.keys(stateValues);
  }
}
var lowerSumStates = stateValues.forEach(lowState);
&#13;
&#13;
&#13;

4 个答案:

答案 0 :(得分:1)

如果您将键,过滤器和地图组合在一起,则可以获得您正在寻找的结果。

var stateValues = { CA: 423, MI: 90, IL: 200, OH: 56 };
var lowerSumStates = Object.keys( stateValues )
      .filter( key => stateValues[key] < 100 )
      .map( key => stateValues[key] );

https://jsfiddle.net/gtfaqdbt/

答案 1 :(得分:0)

Object.keys(stateValues)
      .filter(key => stateValues[key] > 100)
      .map(key => stateValues[key])

答案 2 :(得分:0)

问题是for只能用于数组。并且您正在尝试使用未定义的对象var stateValues = { CA: 423, MI: 90, IL: 200, OH: 56, } function lowState(stateValues) { var resultArray=[]; for (var state in stateValues) { if (stateValues.hasOwnProperty(state) && stateValues[state] < 100) { resultArray.push(state); } } return resultArray; } var lowerSumStates = lowState(stateValues); console.log(lowerSumStates);。因此,请尝试使用(factorial(num1))/(factorial(num2) * (factorial(num1 - num2))) 代替:

&#13;
&#13;
(func(n)(expr))
&#13;
&#13;
&#13;

答案 3 :(得分:0)

&#13;
&#13;
"use strict";

var stateValues = {
  CA: 423,
  MI: 90,
  IL: 200,
  OH: 56
};

function lowState(arr) {
  var [state,val]=arr;
  if (val < 100)
    return state;
}

var lowerSumStates = Object.entries(stateValues).map( lowState ).filter(v=>v);

console.log(lowerSumStates);
&#13;
&#13;
&#13;

这里是要点:

  • Object.entries获取对象并构建一个二维的键/值对数组
  • map()遍历数组并调用您的函数
  • 因为entries是多维的,所以函数的参数是一个键和值的数组,因此你可以使用ES6重组赋值重构它(例如,var [foo,bar]=[1,2])*这不是&#39;必要时,您可以使用arr[1]arr[0],但这更易于维护
  • 如果值小于100,则返回状态缩写,否则返回undefined(因为那是map所做的),留下像[undefined,'MI',undefined,'OH'] <这样的数组/ LI>
  • 然后您可以通过过滤truthy值
  • 轻松删除未定义的内容