如何在JavaScript中将两个数组转换为一个对象?

5

我有两个数组,一个是玩家名称的数组:

players_name = ['John','Paul','Jack',...]

还有一个用于玩家得分的:

points = [23,13,18,...]

我想知道是否有可能(而不是手动)将这两个数组转换为一个对象,看起来像这样:

players_results = {
    'John': { point: 23},
    'Paul': { point: 13},
    'Jack': { point: 18},
}


感谢您的选择!
谢谢!

是的,这是可能的。 - Scott Hunter
8个回答

12
你可以使用 Object.fromEntries() 来达到你需要的结果。 fromEntries 接受一个由数组组成的数组(嵌套数组包含两个值,第一个是键,第二个是值),然后将其转换为对象。试试这个代码-
const players_name = ['John','Paul','Jack'];
const points = [23,13,18];

const result = Object.fromEntries(
  players_name.map((name, i) => ([name, {point: points[i]}]))
);

console.log(result);
.as-console-wrapper{min-height: 100%!important; top: 0}

注意:在对象的键中使用姓名并不是一个好主意,因为不同的人可能有相似的名字。而应该使用唯一值作为键。


6

const players_name = ['John', 'Paul', 'Jack']
const points = [23, 13, 18]

const result = players_name.reduce((prev, item, i) => {
  prev[item] = {
    point: points[i]
  }
  return prev;
}, {});

console.log(result)


2

您可以使用Array#forEach方法

const players_name = ['John','Paul','Jack']
const points = [23,13,18]

players_results ={};

players_name.forEach((a,i)=>{
  players_results[a] = {point:points[i]}
})

console.log(players_results)


2

const players_name = ['John','Paul','Jack'];
    
const points = [23,13,18];

const players_results = {}

players_name.forEach((data, index) => {
  players_results[data] = {
      point: points[index]
    }
});

console.log(players_results);


1

我不知道你是否认为这是手动的,但你可以使用这个函数:

let players_name = ['John','Paul','Jack'];

let points = [23,13,18];

function tabToObject(tab1, tab2) {
  let lengthMin = Math.min(tab1.length, tab2.length);
  let returnObject = new Object();
  for (let i = 0; i < lengthMin; i++) {
    returnObject[tab1[i]] = {point: tab2[i]};
  }
  return returnObject;
}

console.log(tabToObject(players_name, points))


1
你可以使用reduce数组方法Array.prototype.reduce()

const players_name = ['John','Paul','Jack'];
const points = [23,13,18];

const object = players_name.reduce((acc, cur, index) => {
  acc[cur] = {points: points[index]};
  return acc;
}, {});
console.log(object);


0

在我看来,最简单的方法是这样做

players_name.forEach((name, index) => {
    players_results[name] = {point: points[index]}
})

0

方括号表示法是一种非常有用的语法,可以在使用JavaScript对象时轻松地摆脱棘手的情况。

var players_name = ['John','Paul','Jack'];
var points = [23,13,18];

function arrayToObject(arr1,arr2){
  obj = {};
  for(i in arr1){;
    obj[arr1[i]] = arr2[i];
  }
  return obj;
}

x = arrayToObject(players_name, points)
console.log(x);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接