获取数组字长 - JS

Jam*_*gon -2 javascript arrays

我正在创建一个函数:

  • 返回一个数组,其中包含位于给定键的数组的所有奇数长度的单词元素.
  • 如果数组为空,则应返回一个空数组.
  • 如果它不包含奇数长度元素,则应返回空数组.
  • 如果给定键的属性不是数组,则它应返回一个空数组.
  • 如果给定键没有属性,则应返回一个空数组.

这是我的解决方案,目前在某些方面有效:

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']
Run Code Online (Sandbox Code Playgroud)

这里的问题是我的代码返回:

TypeError:无法读取未定义的属性"length"

A. *_*Lau 5

所有你需要使用的是过滤器 ......

使用% 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']
Run Code Online (Sandbox Code Playgroud)

  • 使用`.filter()`是一个很好的计划,但是你的函数不包括OP的最后两个要求(指定的属性可能不存在或者可能不是数组). (2认同)