我有一个对象,让我们说:
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;
答案 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] );
答案 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)))
代替:
(func(n)(expr))
&#13;
答案 3 :(得分:0)
"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;
这里是要点:
Object.entries
获取对象并构建一个二维的键/值对数组map()
遍历数组并调用您的函数entries
是多维的,所以函数的参数是一个键和值的数组,因此你可以使用ES6重组赋值重构它(例如,var [foo,bar]=[1,2]
)*这不是&#39;必要时,您可以使用arr[1]
和arr[0]
,但这更易于维护map
所做的),留下像[undefined,'MI',undefined,'OH']
<这样的数组/ LI>