将关联数组转换为对象 (javascript)

时间:2021-04-27 15:14:02

标签: javascript arrays object

由于 stackoverflow 错误导致的一些文本 一些文本由于计算器溢出错误 一些文本由于计算器溢出错误 一些文本由于计算器溢出错误 一些文本由于计算器溢出错误 一些文本由于计算器溢出错误 一些文本由于计算器溢出错误 一些文本由于计算器溢出错误 一些文本由于计算器溢出错误一些文本由于计算器溢出错误

我有这样的关联数组:

[Array(0)]
0: Array(0)
date_time: "Thu Apr 08 2021 12:00:00 GMT+0300 (Москва, стандартное время)"
excursionshop_currency__id: "1"
excursionshop_timetable__date_time: "2021-04-08 12:00"
excursionshop_timetable__excursionshop_excursionlanguages_id: "1"
excursionshop_timetable__id: 1
excursionshop_timetable__price: "1"
excursionshop_timetable__price_child: ""
excursionshop_timetable__price_foreigner: ""
excursionshop_timetable__price_retiree: ""
excursionshop_timetable__price_schoolchild: ""
excursionshop_timetable__price_student: ""
excursionshop_timetable__price_veteran: ""
excursionshop_timetable__seat_limit: "1"
length: 0
__proto__: Array(0)
length: 1
__proto__: Array(0)

[Array(0)]
0: [excursionshop_timetable__price: "1", excursionshop_timetable__price_student: "", excursionshop_timetable__price_schoolchild: "", excursionshop_timetable__price_child: "", excursionshop_timetable__price_retiree: "", …]
length: 1
__proto__: Array(0)

我想要得到

[Array(0)]
0: {'excursionshop_timetable__price': "1", 'excursionshop_timetable__price_student': "", 'excursionshop_timetable__price_schoolchild': "", 'excursionshop_timetable__price_child': "", 'excursionshop_timetable__price_retiree': "", …}
length: 1
__proto__: Array(0)

1 个答案:

答案 0 :(得分:1)

看来您在这里拥有的实际上已经是一个对象。 JavaScript 不支持关联数组。请参阅我对相关问题 here 的回答。

您正在处理的是一个具有非数字属性的数组,这些属性本质上是作为数组所属对象的属性添加的,而不是数组的索引。这就是为什么你的数组长度为零。如果需要,您实际上可以继续将数组原样用作对象,但是如果您想删除其不必要的数组方法并将其用作普通对象,我们可以遍历属于该数组的键,然后使用数组 reduce() 方法返回标准 JS 对象中的所有键/值对,如下所示:

1.使用 reduce()

const array = [];
array["date_time"] = "Thu Apr 08 2021 12:00:00 GMT+0300 (Москва, стандартное время)";
array["excursionshop_currency__id"] = "1";
array["excursionshop_timetable__date_time"] = "2021-04-08 12:00";
array["excursionshop_timetable__excursionshop_excursionlanguages_id"] = "1";
array["excursionshop_timetable__id"] = 1;
array["excursionshop_timetable__price"] = "1";
array["excursionshop_timetable__price_child"] = "";
array["excursionshop_timetable__price_foreigner"] = "";
array["excursionshop_timetable__price_retiree"] = "";
array["excursionshop_timetable__price_schoolchild"] = "";
array["excursionshop_timetable__price_student"] = "";
array["excursionshop_timetable__price_veteran"] = "";
array["excursionshop_timetable__seat_limit"] = "1";

console.log(array); // -> []

const convertArrObj2Obj = arr => Object.keys(arr).reduce((a,c) => (a[c] = arr[c], a), {});

const object = convertArrObj2Obj(array);

console.log(object);

2.使用扩展语法

根据 Thomas 在评论中的建议,您还可以使用扩展语法来实现这一点,这要容易得多。只需确保检查浏览器对对象扩展语法的支持。

const array = [];
array["date_time"] = "Thu Apr 08 2021 12:00:00 GMT+0300 (Москва, стандартное время)";
array["excursionshop_currency__id"] = "1";
array["excursionshop_timetable__date_time"] = "2021-04-08 12:00";
array["excursionshop_timetable__excursionshop_excursionlanguages_id"] = "1";
array["excursionshop_timetable__id"] = 1;
array["excursionshop_timetable__price"] = "1";
array["excursionshop_timetable__price_child"] = "";
array["excursionshop_timetable__price_foreigner"] = "";
array["excursionshop_timetable__price_retiree"] = "";
array["excursionshop_timetable__price_schoolchild"] = "";
array["excursionshop_timetable__price_student"] = "";
array["excursionshop_timetable__price_veteran"] = "";
array["excursionshop_timetable__seat_limit"] = "1";

console.log(array); // -> []

const convertArrObj2Obj = arr => ({...arr});

const object = convertArrObj2Obj(array);

console.log(object);

相关问题