所以我想使用Array.prototype.reduce函数来减少一些数组(从object转换而来)。
这就是我稍后将使用Object.entries来获取数组的对象。
const activityLoading = {
topicsForClassCourse: true,
b: false,
c: false,
d: true,
e: false
}
我还有一个键数组,我想在减少这个对象的同时忽略它们。因此,activityLoading中的任何键以及它的本地键都将被忽略。
const local = [ "topicsForClassCourse", "e" ]
现在,我想将对象简化为单个值。如果除本地数组中的键之外,任何键都为true,则应返回true,否则返回false。
这就是我能想到的。但它返回的是false。
const loadingSome = () => {
const local = [ "topicsForClassCourse", "timetableForClass" ];
const entries = Object.entries(activityLoading)
const reducer = (acc, current) => {
if(local.includes(current[0])) {
return false
}
if(current[1]) {
return true;
}
return false
}
const result = entries.reduce(reducer, false)
console.log(result)
}
发布于 2021-04-23 06:59:56
你应该尝试一些更简单的工作,使用reduce函数来掌握它。现在对于你的问题,你可以试试这个:
const loadingSome = () => {
const local = [ "topicsForClassCourse", "timetableForClass" ];
const entries = Object.entries(activityLoading)
const reducer = (acc, current) => {
if(local.includes(current[0])) {
return acc
}
return current[1] || acc;
}
const result = entries.reduce(reducer, false)
console.log(result)
}
如您所见,您忘记了将acc
考虑在内。我没有尝试过上面的代码,但它应该可以工作。如果没有让我知道。
发布于 2021-04-23 06:59:58
基本上,我会从编写单个值本身的测试开始
function test(key, value) {
const ignore = local.includes(key)
return !ignore && value
}
一旦你有了它,有很多方法可以在你的整个对象上运行它。我不确定.reduce
是不是最好的解决方案。我建议使用.find
。
const activityLoading = {
topicsForClassCourse: true,
b: false,
c: false,
d: true,
e: false
}
const local = [ "topicsForClassCourse", "e" ]
const result = Object.entries(activityLoading).find(([key, value]) => {
const ignore = local.includes(key)
return !ignore && value
})
console.log(result) // ['d', true]
const foundSomething = !!result
console.log(foundSomething) // true
如果您发现处理返回的['d', true]
很麻烦,那么使用.some
而不是.find
将返回一个布尔值,而不是匹配测试的值。
但是如果你真的想这样做,.reduce
也可以完成这项工作,只是要注意两件事:
false
开始,因为最初您假设没有匹配的值。,
true
.,以便任何当前的true
都会使整个结果为空。
const activityLoading = {
topicsForClassCourse: true,
b: false,
c: false,
d: true,
e: false
}
const local = [ "topicsForClassCourse", "e" ]
const result = Object.entries(activityLoading).reduce((accu, [key, value]) => {
const ignore = local.includes(key)
const test = !ignore && value
return accu || test
}, false)
console.log(result) // true
发布于 2021-04-23 07:03:15
首先使用filter
过滤对象以过滤出local
数组键,然后使用some
检查任何键是否为真/假,如何?
const activityLoading = {
topicsForClassCourse: true,
b: false,
c: false,
d: true,
e: false
};
const local = ["topicsForClassCourse", "e"];
let result = Object.entries(activityLoading)
.filter(([key, value]) => !local.includes(key))
.some(([key, value]) => value);
console.log(result);
或者您可以只使用some
数组帮助器
const activityLoading = {
topicsForClassCourse: true,
b: false,
c: false,
d: true,
e: false
};
const local = ["topicsForClassCourse", "e"];
let result = Object.entries(activityLoading)
.some(([key, value]) => !local.includes(key) && value)
console.log(result);
https://stackoverflow.com/questions/67225264
复制相似问题