【问题标题】:Get All But The Last Element - JS获取除最后一个元素之外的所有元素 - JS
【发布时间】:2017-06-20 20:26:21
【问题描述】:

我正在开发一个函数,该函数返回一个数组,该数组包含位于给定键处的数组的最后一个元素以外的所有元素。

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

这是我的代码:

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]。

知道我做错了什么吗?

【问题讨论】:

  • 我认为你搞砸了 -1...尝试在 for 循环而不是 if 语句中使用它...:D
  • if(obj[key].length - 1){ 总是返回 true(0 除外),所以错误可能就在那里

标签: javascript arrays


【解决方案1】:

优化getAllButLastElementOfProperty功能版本:

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);

【讨论】:

    【解决方案2】:

    您可以通过将数组作为参数然后调用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 会从末尾访问数组。在 sn-p 中,这意味着我们会获取从第一个元素到索引 arr.length - 1 的所有内容。如果我们使用arr.slice(-1),这将返回与您想要的完全相反的最后一个元素(当然仍然是一个数组)。

    【讨论】:

      【解决方案3】:

      为您的 if 语句尝试此条件

      if(i !== obj[key].length - 1){
                output.push(obj[key][i]);
            }
      

      【讨论】:

        猜你喜欢
        • 2023-01-05
        • 1970-01-01
        • 2018-07-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多