获得所有但最后的元素 - JS

时间:2017-06-20 11:44:48

标签: javascript arrays

我正在处理一个函数,该函数返回一个数组,该数组包含位于给定键的数组的最后一个元素。

- 如果数组为空,则应返回一个空数组 - 如果给定键的属性不是数组,则返回一个空数组 - 如果键上没有属性,则应返回一个空数组。

这是我的代码:

function getAllButLastElementOfProperty(obj, key) {
  var output = [];

   if ( key in obj && Array.isArray(obj[key]) && obj[key].length !== 0)
  {
        for(var i = 0; i < obj[key].length; i++ ){
          if(obj[key].length - 1){
              output.push(obj[key][i]);
          }

        }
       return output;
  }
}


var obj = {
  key: [1, 2, 3]
};
var output = getAllButLastElementOfProperty(obj, 'key');
console.log(output); // --> MUST RETURN [1,2]

我的代码返回[1,2,3]。

我知道我做错了什么?

3 个答案:

答案 0 :(得分:1)

优化的getAllButLastElementOfProperty功能版本:

&#13;
&#13;
function getAllButLastElementOfProperty(obj, k) {
    if (!obj.hasOwnProperty(k) || !Array.isArray(obj[k]) || obj[k].length === 0) {
        return [];
    }
    return obj[k].slice(0, -1);  // getting all but the last element of the array
}

var obj = { key: [1, 2, 3] },
    output = getAllButLastElementOfProperty(obj, 'key');
    
console.log(output);
&#13;
&#13;
&#13;

答案 1 :(得分:0)

您可以通过将数组作为参数然后调用getAllButLastElement(obj.key)来概括您的函数。如果对象没有属性key,这也会返回一个空数组。

然后可以这样实现:

function getAllButLastElement(arr) {
  if(!Array.isArray(arr))
    return []; // Return an empty array

  return arr.slice(0, -1);
}

let obj = {
  'key': [ 1, 2, 3 ],
  'empty': [ ]
};

console.log('obj.key:', getAllButLastElement(obj.key)); // Proper Array
console.log('obj.empty:', getAllButLastElement(obj.empty)); // Empty Array
console.log('obj.unknown:', getAllButLastElement(obj.unkown)); // Property does not exist

将负数传递给Array.prototype.slice可以从最后访问数组。在代码段中,这意味着我们从第一个元素到索引arr.length - 1获取所有内容。如果我们使用arr.slice(-1),那么只会返回最后一个元素(当然仍然是数组),这与你想要的完全相反。

答案 2 :(得分:0)

请为if声明

尝试此条件
if(i !== obj[key].length - 1){
          output.push(obj[key][i]);
      }