【问题标题】:Combining two arrays return wrong result?组合两个数组返回错误的结果?
【发布时间】:2021-04-25 15:43:33
【问题描述】:

我正在尝试以特定格式组合两个数组,但我无法想象我做错了什么。

这是我想要的输出结果:

[ data: [
  {value: 100, name: 'January'},
  {value: 30, name: 'February'},
  {value: 150, name: 'March'},
  {value: 85, name: 'April'},
  {value: 60, name: 'May'},
  {value: 20, name: 'June'}
  ],
  radius: '50%' ]

这是我的代码:

    var sales = ["100", "30", "150", "85", "60", "20"];
    var months = ["January", "February", "March", "April", "May", "June"];
    var rad = "50%";

    var combined = sales.map(function combine(dataItem, index) {
          return {
              data: [{"value":dataItem, "name":months[index]}],
              radius: rad
          };
                }).filter(function removeEmpty(item) {
                  return item.data.length;
                });
                
    console.log(combined);

【问题讨论】:

  • “这是我想要的输出结果” - 这是可能的,但是当你想要一个对象时,你不应该滥用数组。跨度>
  • 这是一个调试器的好例子。
  • radius 来自哪里?
  • @outis 感谢您的回答,是的,我有 jsfiddle 我在过去的一个小时里一直在尝试修复它,但没有任何问题 jsfiddle.net/zfo3ag08
  • @SAM 你好,半径总是 50%,它是需要在对象内部的“定义值”。但是,编辑了 sn-p。谢谢

标签: javascript arrays


【解决方案1】:

只需map 覆盖它并在对象中添加valuename

var sales = ["100", "30", "150", "85", "60", "20"];
var months = ["January", "February", "March", "April", "May", "June"];

const data = sales.map((sale, i) => ({
  value: parseInt(sale),
  name: months[i],
}));

const result = {
  data,
  radius: "50%",
};

console.log(result);

【讨论】:

  • 这是一个更好、更简洁的解决方案:)
【解决方案2】:

因此,在您的预期输出中,您将数组视为对象。试试这个以获得预期的结果:

{data: [
  {value: 100, name: 'January'},
  {value: 30, name: 'February'},
  {value: 150, name: 'March'},
  {value: 85, name: 'April'},
  {value: 60, name: 'May'},
  {value: 20, name: 'June'}
],
radius: '50%'}

至于如何达到效果,试试这个:

const sales = ["100", "30", "150", "85", "60", "20"],
months = ["January", "February", "March", "April", "May", "June"];

const combine = (s, m) => {
  const arr = [];
  for (let i = 0; i < Math.min(s.length, m.length); i++)
    arr.push({ value: s[i], name: m[i] });
  return arr;
};

const dataObj = {
  data: combine(sales, months),
  radius: "50%",
};


console.log(dataObj);

【讨论】:

    猜你喜欢
    • 2019-10-20
    • 2011-02-16
    • 2019-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-10
    • 2021-08-06
    • 1970-01-01
    相关资源
    最近更新 更多