javascript 将数组的数组转换为对象?

e3bfsja2  于 2023-05-21  发布在  Java
关注(0)|答案(6)|浏览(137)

尝试将数组的数组(其中内部数组只存储了两个值)转换为对象。
这是我目前得到的:

function fromListToObject(array) {
  var obj = {};
  for (i in array) {
      obj[array[i[0]]] = array[i[1]];
  };
  return obj
};


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

但是它给了我一个对象,其中的键是数组对,而值是“未定义的”。
哈普

0dxa2lsx

0dxa2lsx1#

在ES6中,您可以使用

var array = [['make', 'Ford'], ['model', 'Mustang'], ['year', 1964]],
    object = Object.assign(...array.map(([k, v]) => ({ [k]: v })));

console.log(object);
mbzjlibv

mbzjlibv2#

您可以按如下方式使用Array.prototype.reduce()

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

const object = array.reduce((result, [key, value]) => {
  result[key] = value;
  
  return result;
}, {});

console.log(object);
rhfm7lfc

rhfm7lfc3#

将您的代码更改为:

function fromListToObject(array) {
  var obj = {};
  for (i in array) {
      obj[array[i][0]] = array[i][1];
  };
  return obj
};

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

你在获取数组值时写错了语法。

wlwcrazw

wlwcrazw4#

Object.fromEntries方法可以简单地做到这一点

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

var obj = Object.fromEntries(array);

console.log(obj);

更多关于Object.fromEntries()-https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/fromEntries

f5emj3cl

f5emj3cl5#

试试这个:

function fromListToObject(array) {
  return Object.assign.apply({}, array.map(function(subarray) {
      var temp = {}
      temp[subarray[0]] = subarray[1]
      return temp
    })
  )
};

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

它将所有数组平铺成一个具有以下键值对的大对象:

{ make: 'Ford', model: 'Mustang', year: 1964 }
2vuwiymt

2vuwiymt6#

如果您正在使用TS并收到此类错误消息:“spread参数必须具有元组类型或传递给rest参数。ts(2556)”
因为你使用的是spread操作符,在这种情况下,你传递给目标对象的参数不止一个(assing方法的第一个参数),所以你必须首先“封装”你的数组。
就像这样:
const object = Object.assign([...yourArray].map( ([k, v]) => ( {[k]: v} ) ));
应该可以的您可以查看更多关于这个主题的信息:A spread argument must either have a tuple type or be passed to a rest parameter React

相关问题