我正在学习如何编写和处理Hack Reactor拼图(见下文)。 我不明白为什么我的功能块的else部分不起作用。有人能指出我正确的方向吗?
编写一个名为
getElementsThatEqual10AtProperty
的函数。给定一个对象和一个键,
getElementsThatEqual10AtProperty
返回 包含位于给定数组的所有元素的数组 密钥等于十。注意:
- 如果数组为空,则应返回一个空数组。
- 如果数组中没有元素等于10,则应该返回一个空数组。
- 如果给定键的属性不是数组,则应返回一个空数组。
- 如果密钥没有属性,则应返回一个空数组。
示例:
var obj = { key: [1000, 10, 50, 10] };
var output = getElementsThatEqual10AtProperty(obj, 'key');
console.log(output); // > --> [10, 10]
我的解决方案:
var obj = {
key: '[1000, 10, 50, 10]'
};
function getElementsThatEqual10AtProperty(obj, key) {
if (typeof Array.isArray(obj[key])) {
for (let key in obj) {
tenArray = obj.key = obj[key].filter( element => element === 10);
}
} else {
tenArray = obj.key = [];
}
return tenArray;
}
console.log(getElementsThatEqual10AtProperty(obj, 'key'))
最终解决方案
var obj = {
key: [1000, 10, 50, 10]
};
function getElementsThatEqual10AtProperty(obj, key) {
if (Array.isArray(obj[key])) {
tenArray = obj[key].filter( element => element === 10);
} else {
tenArray = [];
}
return tenArray;
}
console.log(getElementsThatEqual10AtProperty(obj, 'key'))
答案 0 :(得分:0)
仅使用isArray检查数组,此处不需要typeof
。
var obj = {
key: '[1000, 10, 50, 10]'
};
console.log(Array.isArray(obj.key)) // false
console.log(typeof Array.isArray(obj.key)) // 'boolean'
console.log(Boolean(typeof Array.isArray(obj.key))) // true

数字在'键'应该声明值不带单引号,否则它将被视为字符串。
var obj = {
key: [1000, 10, 50, 10]
};
console.log(Array.isArray(obj.key)) // true

此处不需要for ..in
因为密钥已知。我也不需要修改obj.key。
if (Array.isArray(obj[key])) {
tenArray = obj[key].filter( element => element === 10);
}
答案 1 :(得分:0)
Obj [key]未在代码中声明为数组,而是作为字符串声明。您也可以更简单地满足您的要求:
var obj = {
key: [1000, 10, 50, 10]
};
function getElementsThatEqual10AtProperty(obj, key) {
if (obj[key] && obj[key] instanceof Array) {
return obj[key].filter( element => element === 10);
}
return [];
}
console.log(getElementsThatEqual10AtProperty(obj, 'key'));

答案 2 :(得分:0)
过滤数组:
var obj = {
key: [1000, 10, 50, 10]
}
function getElementsThatEqual10AtProperty(obj, key) {
var tens = []
if (Array.isArray(obj[key])) {
tens = obj[key].filter(function(el) {
return (10 === el)
})
}
return tens
}
var tensArray = getElementsThatEqual10AtProperty(obj, 'key')
console.log(tensArray)
答案 3 :(得分:-1)
您的问题是您在功能的obj.key
部分设置了obj[key]
而不是else
。