不使用 Object.entries() 返回键值对数组的数组
Posted
技术标签:
【中文标题】不使用 Object.entries() 返回键值对数组的数组【英文标题】:Return an array of arrays of key-value pairs WITHOUT using 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'
【参考方案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
)
);
现在我们可以稍微优化一下,让我们定义两个对象:objA
和 objB
。第一个将是您的第一个示例。
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)
);
【讨论】:
以上是关于不使用 Object.entries() 返回键值对数组的数组的主要内容,如果未能解决你的问题,请参考以下文章
Object.keys(),Object.values(),Object.entries()
在 Object.entries 上运行 forEach 不会返回与 for 循环相同的内容