【问题标题】:How do I loop through an array (recurision) and push object key/value pairs in another array?如何循环遍历一个数组(递归)并将对象键/值对推送到另一个数组中?
【发布时间】:2020-01-19 05:18:53
【问题描述】:

给定一个数组。我想创建一个递归函数,它遍历 arr 并将键/值对推送到一个新数组(arr2)中,如下所示:

var arr2 = []
function recursive(arr) // function gets executed 
arr2 //will return the array with arrays
[
    [ mike, 22]
    [ robert, 12]
    [ roger, 44]
    [ peter, 28]
    [ ralph, 67]
]

到目前为止,我有这段代码,但它将对象推送到 arr2,而不是数组!

var arr =[{name:'mike', age:22},{name:'robert', age:12},{name:'roger', age:44},{name:'peter', age:28},{name:'Ralph', age:67}]

var arr2 = []

function recursive(arr) {
  if (Array.isArray(arr)) {
    arr.forEach(function(object) {
      arr2.push(object)
    })
  }
}

recursive(arr)
console.log(arr2)

我该如何解决?

PS:由于我是初学者,请尽可能坚持我的代码方法。我相信有更好的方法来做到这一点。

【问题讨论】:

  • 为什么需要/询问递归?
  • 无需递归使用简单迭代
  • @NinaScholz 不知道......我猜是因为这个任务来自章节递归。正如我所看到的,这是一个简单的循环,但我认为练习会在此基础上建立并最终成为递归

标签: javascript arrays loops recursion


【解决方案1】:

您可以映射对象的值。这适用于需要订单的对象

function getValues(array) {
    return array.map(Object.values);
}

var array = [{ name: 'mike', age: 22 }, { name: 'robert', age: 12 }, { name: 'roger', age: 44 }, { name: 'peter', age: 28 }, { name: 'Ralph', age: 67 }] 

console.log(getValues(array));
.as-console-wrapper { max-height: 100% !important; top: 0; }

如果没有,您可以使用给定的键数组进行映射。

您可以映射对象的值。这适用于需要订单的对象

function getValues(array) {
    var keys = ['name', 'age']
    return array.map(o => keys.map(k => o[k]));
}

var array = [{ name: 'mike', age: 22 }, { name: 'robert', age: 12 }, { name: 'roger', age: 44 }, { name: 'peter', age: 28 }, { name: 'Ralph', age: 67 }] 

console.log(getValues(array));
.as-console-wrapper { max-height: 100% !important; top: 0; }

【讨论】:

  • loops through arr and pushes the key/value pairs,应该是Object#entries而不是Object#values
  • 我在想要的结果集中看到了 oly 值。没有'name''age'
【解决方案2】:

你可以像这样简单地映射:

var arr2 = arr.map(x=>[x.name, x.age]);

【讨论】:

    猜你喜欢
    • 2020-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-04
    • 1970-01-01
    相关资源
    最近更新 更多