javascript - 将数组转换为对象

标签 javascript arrays

我正在尝试编写一个函数,它接受一个数组数组,并返回一个对象,其中数组中的每对元素作为键值对。我搜索了堆栈溢出并提出了以下代码。但是,我下面的代码仅返回第一个数组 { make: 'Ford' }。我的代码不返回其余的数组。关于为什么我的函数不返回数组数组的其余部分有什么建议吗?

var array = [
  ['make', 'Ford'],
  ['model', 'Mustang'],
  ['year', 1964]
];

function fromListToObject() {

  for (var i = 0; i < array.length - 1; ++i) {
    var object = {};
    //creates an object as a variable
    var newArray = array[i];
    //creates a variable for the array within the array
    object[i] = newArray[1];
    //sets the object of the element to position 1 of the array within the array
    object[newArray[0]] = object[i];
    //sets the key of the element to position 0 of the array within the array
    delete object[i];
    // removes the previous key of 0
    return object;
  }
}

console.log(fromListToObject(array));

最佳答案

您的代码有几个问题。

  • 目标对象在每次迭代中都会重置为 {}。因此,您应该将 var object = {} 移出循环。

  • 您从循环内部返回,循环立即结束:这应该发生在循环之后。

  • 您迭代的次数太少了。删除- 1:

       for (var i = 0; i < array.length; ++i) {
    
  • 有一个对数字属性的赋值,您在两行后将其删除:这是一个成本高昂的操作,您应该避免。只需在一次操作中完成分配:

       object[newArray[0]] = newArray[1];
    

这里是所有更正的内容:

var array = [['make', 'Ford'], ['model', 'Mustang'], ['year', 1964]];

function fromListToObject() {
  var object = {}; // out of the loop
  for (var i = 0; i < array.length; ++i) { // iterate to last
    var newArray = array[i];
    object[newArray[0]] = newArray[1];
  }
  return object; // out of the loop
}

var obj = fromListToObject(array);

console.log(obj);

ES6 版本

如果您可以使用 ES6 语法,请考虑以下解决方案:

function fromListToObject(array) {
    return Object.assign(...array.map( ([key,val]) => ({[key]: val}),{}));
}

const array = [['make', 'Ford'], ['model', 'Mustang'], ['year', 1964]];
const obj = fromListToObject(array);
console.log(obj);

使用 map

您可能还对 ES6 Map 感兴趣对象,其工作方式与对象类似,可以通过最简单的方式从数组构造:

const mp = new Map(array);

然后您可以按如下方式访问键值:

mp.get('make') === 'Ford';

并迭代:

mp.forEach( function (val, key) {
    console.log(key, val);
});

关于javascript - 将数组转换为对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42967914/

相关文章:

c++ - 从文件中读取输入并填充数组以存储数据供以后使用

c++ - 在 Go (golang) 和 C++ 之间交换数据结构(数组)

javascript - 如何通过操作特定键从对象创建 HashMap

arrays - 当我 grep 数组时,如何获取元素的索引?

javascript - 两个实例包含相同的值

javascript - URL 链接在 Angularjs 中无法正确重定向

javascript - 如何在下拉列表更改时动态隐藏表格行?

javascript - 日期加法公式javascript

javascript - 如何在 vue.js 中定位自定义元素( native Web 组件)?

javascript - 如何将对象数组转换为表格数据?