【问题标题】:Return an array of arrays of key-value pairs WITHOUT using Object.entries()不使用 Object.entries() 返回键值对数组的数组
【发布时间】:2020-04-18 23:02:25
【问题描述】:

我正在尝试编写一个函数,该函数接受一个对象并返回一个键值对数组的数组。我也不能使用Object.entries() 函数。

例如:var obj = { a: 1, b: 2, c: 3 }; 我想返回:[["a",1], ["b",2], ["c",3]]

这是我目前所写的:

function entries(obj) {

var result = Object.keys(obj).map(function(key) {
  return [Number(key), obj[key]];
});
}
console.log(
  entries(obj = {"1":5,"2":7,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0})
  );

但是,此时我只能让它返回 undefined。我到底在这里做错了什么?

【问题讨论】:

  • 您忘记在 entries 函数中使用 return。您也不应该使用Number(key),这将导致NaN 用于无法转换为数字的键,例如'a'

标签: javascript sub-array


【解决方案1】:

你可以做一个简单的for循环

var obj= {"1":5,"2":7,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0}
var arr=[]
for(var item in obj){
  arr.push([item,obj[item]])
}
console.log(arr)

【讨论】:

    【解决方案2】:

    首先让我们分析您的代码并发现一些错误,然后我们将专注于解决方案。

    function entries(obj) {
      var result = Object.keys(obj).map(function(key) {
        return [Number(key), obj[key]];
      });
    }
    console.log(
      entries(obj = {"1":5,"2":7,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0})
    );
    

    在您的代码中,函数entries 不返回任何值。因此,console.log() 将返回 undefined。我们可以用return 替换var result = 来解决这个问题。所以现在你的entries 函数返回一个基于你的对象obj 的数组。像这样:

    function entries(obj) {
      return Object.keys(obj).map(function(key) {
        return [Number(key), obj[key]];
      });
    }
    console.log(
      entries(obj = {
        "1": 5,
        "2": 7,
        "3": 0,
        "4": 0,
        "5": 0,
        "6": 0,
        "7": 0,
        "8": 0,
        "9": 0,
        "10": 0,
        "11": 0,
        "12": 0
      })
    );

    现在我们可以稍微优化一下,让我们定义两个对象:objAobjB。第一个将是您的第一个示例。

    let objA = { a: 1, b: 2, c: 3 };
    let objB = {"1":5,"2":7,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0};
    

    如果您调用console.log(entries(objA)),您将收到NaN 错误,因为a 不是数字并且您正在使用Number() 方法转换key 值。让我们删除该函数调用。这将是解决方案的最终版本:

    let objA = { a: 1, b: 2, c: 3 };
    let objB = {"1":5,"2":7,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0};
    
    function entries(obj) {
      return Object.keys(obj).map(function(key) {
        return [key, obj[key]];
      });
    }
    
    console.log(entries(objA));
    console.log(entries(objB));

    【讨论】:

      【解决方案3】:

      你忘记从entries()返回最终的result

      function entries(obj) {
        var result = Object.keys(obj).map(function(key) {
            return [Number(key), obj[key]];
          });
          return result;
      }
      console.log(
        entries(obj = {"1":5,"2":7,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0})
        );

      【讨论】:

        猜你喜欢
        • 2020-01-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-08-18
        相关资源
        最近更新 更多