繁体   English   中英

如何将两个 arrays 组合成具有来自每个数组的数据的多个对象?

[英]How to combine two arrays into multiple objects with data from each array?

我正在尝试将两个长度为n的 arrays 解析为具有与 arrays 相同数量的键值对的n对象。 每个 object 都应该有一个与对象的 position 相关的动态名称键。

例如,如果每个数组中有 10 个项目,则应该有 10 个对象,并且每个对象应该有一个 name 键,它是顺序的 --> Day[n]

输入将如下所示:

// input
const temperatures: [65, 33]
const rain: [3, 8]

output 形状应如下所示:

// output
[
  {
    name: 'Day1',
    temperature: 65,
    rain: 3
  },
  {
    name: 'Day2',
    temperature: 33,
    rain: 8
  },
]

我尝试通过每个数组进行映射并为每个数组项创建一个 object,然后将它们组合成一个对象数组,但出于某种原因,结果数组仅包含一组数组名称。

到目前为止,这是我的代码:

const temperature = [65, 33];
const rain = [3, 8];
const days = { name: 'Day1' };

const data1 = temperature.map((val) => {
  return { temperature: val };
});

const data2 = rain.map((val) => {
  return { rain: val };
});

const total = { ...days, ...data1, ...data2 };

console.log(total);

// output: { '0': { temperature: 65 }, '1': { temperature: 33 }, name: 'Day1' }

注意:我正在创建输入 arrays,所以如果我需要添加或更改任何数据,这是可能的。

const temperature = [65, 33];
const rain = [3, 8]; 
const length = Math.max(temperature.length, rain.length);

const output = [];

for(let i = 0; i < length; i++) {
  output.push({rain:rain[i], temperature:temperature[i], name:`Day${i+1}`});
}

 const temperatures = [ 65, 33 ], rain = [ 3, 8 ], output = temperatures.map((t,i) => ( { name: `day${i+1}`, temperature: t, rain: rain[i] })); console.log( output )
 .as-console-wrapper {max-height: 100%;important:top;0;}

假设输入 arrays 的大小相同,一种可能的方法如下:

const result = temperature.map((temp, index) => {
    return { name: `Day${index+1}`, temperature: temp, rain: rain[index] };
};

虽然我个人认为这不是最干净或最清晰的方法,但可能值得考虑更改输入类型。

创建一个 function,它接受温度和雨水作为参数并返回最终结果。 在这里,我们假设温度和降雨阵列的长度相同。

 const temperature = [65, 33]; const rain = [3, 8]; function convertArray(temperature, rain) { const result = []; for (let i = 0; i < rain.length; i++) { const weather = { name: `Day${i + 1}`, temperature: temperature[i], rain: rain[i] } result.push(weather) } return result; } console.log(convertArray(temperature, rain));

您的用例不需要使用 map() function。

我假设,arrays temperaturerain总是具有相同数量的元素。 也就是说,如果temperature数组有3 天的温度数据,那么即使是rain数组也应该有3 天的降雨数据

通过上述假设,我们可以遍历temperature数组的元素,并将每天的单个 object 插入一个新的最终数组,即您预期的 output。

我们将使用every() function 来实现目标:

var finalArray = [];

temperature.every((element, index) => {
    finalArray.push({
        name: `Day ${index}`, //Use index+1 for Day 1 and not Day 0
        temperature: element,
        rain: rain[index]
    });
});

console.log(finalArray); //The output

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM