获取数组单词长度 - JS
2017-06-20
1102
我正在创建一个函数:
- 返回一个数组,其中包含位于给定键处的数组的所有奇数长度单词元素。
- 如果数组为空,则应返回一个空数组。
- 如果它不包含奇数长度元素,则应返回一个空数组。
- 如果给定键处的属性不是数组,则应返回一个空数组。
- 如果给定键处没有属性,则应返回一个空数组。
这是我的解决方案,到目前为止,该解决方案在某些部分有效:
function getOddLengthWordsAtProperty(obj, key) {
var output = [];
for(var i = 0; i < obj.key.length; i++){
if (key in obj){
if (Array.isArray(obj[key])){
if(obj[key].length){
if(obj.key[i].split("").length % 2 !== 0){
output.push(obj.key[i]);
}
}
}
}else{
return [];
}
}
return output;
}
var obj = {
key: ['It', 'has', 'some', 'words']
};
var output = getOddLengthWordsAtProperty(obj, 'key');
console.log(output); // --> ['has', 'words']
这里的问题是我的代码返回:
TypeError: Cannot read property 'length' of undefined
3个回答
您需要使用的只是 过滤器 ...
使用
% 2
,如果是奇数,则为
1
,这是真实的,并将返回正确的数组。
function getOddLengthWordsAtProperty(obj, key) {
if ( key in obj && Array.isArray(obj[key]) )
{
return obj[key].filter( (item) => item.length % 2 );
}
return []; // don't need else as return would end the function if it went into 'if'
}
var obj = {
key: ['It', 'has', 'some', 'words']
};
var output = getOddLengthWordsAtProperty(obj, 'key');
console.log(output); // --> ['has', 'words']
A. L
2017-06-20
我发现此函数有两个问题。
首先,
obj.key
与
obj["key"]
相同。您应该改用
obj[key]
。
其次,您应该将
if (key in obj)
之类的验证放在循环之外。这样,您就可以在循环声明中安全地引用
obj[key].length
,而不必担心出现该错误。
J Steinberg
2017-06-20
在使用
for 循环
之前,您应该首先检查
key
属性是否存在,如果不存在 key 属性,则会出现上述错误
以下代码片段应该可以正常工作而不会出现任何错误。
function getOddLengthWordsAtProperty(obj, key) {
var output = [];
if (key in obj && Array.isArray(obj[key])) {
var len = obj.key.length;
for (var i = 0; i < len; i++) {
if (obj.key[i].length % 2 !== 0) {
output.push(obj.key[i]);
}
}
}
return output;
}
var obj = {
key: ['It', 'has', 'some', 'words']
};
var output = getOddLengthWordsAtProperty(obj, 'key');
console.log(output);
warl0ck
2017-06-20