gpt4 book ai didi

javascript - 无法创建对象数组

转载 作者:行者123 更新时间:2023-11-30 08:21:31 24 4
gpt4 key购买 nike

我有一个数组,我想选择其中的 3 个元素并将其作为单个对象存储在另一个数组中,然后再次对数组的每 3 个元素重复执行相同的过程。这是我的代码:

let breakpoints = [
{name: "from-amonut", value: "100"},
{name: "to-amonut", value: "200"},
{name: "gst", value: "10"},
{name: "from-amonut", value: "200"},
{name: "to-amonut", value: "300"},
{name: "gst", value: "20"},
{name: "from-amonut", value: "300"},
{name: "to-amonut", value: "400"},
{name: "gst", value: "30"}
];

let temp = {
"from_amount": 0,
"to_amount": 0,
"gst": 0
};

let formattedBreakpoints = [];

breakpoints.map((v, k) => {
(v.name == "from-amonut") ? temp.from_amount = v.value: "";
(v.name == "to-amonut") ? temp.to_amount = v.value: "";
(v.name == "gst") ? temp.gst = v.value: "";
((k + 1) % 3 === 0) ? (formattedBreakpoints.push(temp), console.log(temp)) : "";

});
console.log(formattedBreakpoints);

我期望 formattedBreakpoints[{"from_amount":100, "to_amount":200, "gst":10}, {"from_amount":200, "to_amount ":300, "gst":20}.....] 但仅返回具有最后一个数组元素值的所有对象。

最佳答案

您可以使用 Array.reduce()将所有属性添加到最后一个对象。每当 3 的索引 (i) 余数为 0 时,您将另一个对象添加到累加器。

const breakpoints = [{"name":"from-amonut","value":"100"},{"name":"to-amonut","value":"200"},{"name":"gst","value":"10"},{"name":"from-amonut","value":"200"},{"name":"to-amonut","value":"300"},{"name":"gst","value":"20"},{"name":"from-amonut","value":"300"},{"name":"to-amonut","value":"400"},{"name":"gst","value":"30"}];

const result = breakpoints.reduce((r, { name, value }, i) => {
if(i % 3 === 0) r.push({});

const key = name.replace(/-/g, '_');

r[r.length - 1][key] = value;

return r;
}, []);

console.log(result);

您的代码中的问题是 temp 的重用。由于 temp 是一个对象,将它插入数组,添加对数组的引用,并且不会创建新对象。为防止这种情况,您可以在到达最后一个属性时初始化 temp。您还应该使用 Array.forEach() (做一些有值(value)的事情)而不是 Array.map() (使用基于原始值的项目创建新数组)。

const breakpoints = [{"name":"from-amonut","value":"100"},{"name":"to-amonut","value":"200"},{"name":"gst","value":"10"},{"name":"from-amonut","value":"200"},{"name":"to-amonut","value":"300"},{"name":"gst","value":"20"},{"name":"from-amonut","value":"300"},{"name":"to-amonut","value":"400"},{"name":"gst","value":"30"}];

let temp = {};

const formattedBreakpoints = [];

breakpoints.forEach((v, k) => {
if(v.name == "from-amonut") temp.from_amount = v.value;
if(v.name == "to-amonut") temp.to_amount = v.value;
if(v.name == "gst") { // whenever we get to gst, we can push to array, and reset temp
temp.gst = v.value;
formattedBreakpoints.push(temp);
temp = {};
};
});
console.log(formattedBreakpoints);

关于javascript - 无法创建对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52822004/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com