【问题标题】:how to combine all values of an array to form a single variable?如何组合数组的所有值以形成单个变量?
【发布时间】:2021-11-01 09:18:40
【问题描述】:

我有一个数组,它由具有两个其他节点的对象组成,(名称,标题)该数组具有“尺寸”、“样式”、“颜色”等产品属性,所有这些都在一个数组中。我想要的是在属性“名称”的基础上创建多个动态变量,然后将该特定名称的所有标题值分配给单个变量,然后移动到下一个并在 JS 中执行相同操作,之后我正在共享一个图像数组以便更好地理解我的数组的结构。

到目前为止我尝试过的代码也没有成功。

     var previousValue = a[0].name; 
                  for(var i =0; i < a.length ; i++)
                    { 
                        var currentName = a[i].name; 
                      if(previousValue == currentName) 
                      {
                        var str = a[i].name.replace(/\s+/g, '');
                        var sub_var = "var";
                        
                        console.log(sub_var+str);
                        

                      }
                       else{
                        var str = a[i].name.replace(/\s+/g, '');
                        var sub_var = "var";

                        console.log(sub_var+str);
                       }
                      previousValue = currentName; 
                    }

这里“a”是我的数组,它试图做的是设置名称的先前值并将其与当前值进行比较,但这不是正确的方法,我没有得到任何成功的结果也就是说,我需要的输出是动态创建的多个变量,例如

            var Size = M | L | XL | 2XL | 3XL
            var selectyourfit = Regular | Extra Soft | Premium

因此,如果有人可以帮助我,那将非常有帮助。非常感谢。

【问题讨论】:

  • 你到底想要什么输出?
  • 如果可能的话,请用您正在寻找的数组结构的示例更新您的问题,以帮助您了解您想要的究竟是什么。
  • 确定让我更新它。
  • 看看我更新的问题,我已经提到了我需要的结果。

标签: javascript jquery arrays object


【解决方案1】:

我认为这应该可以解决问题:

const result = YOUR_ARRAY.reduce((acc, val) => {
  const { name, title } = val;
  if (acc[name]) {
    acc[name].push(title)
  } else {
    acc[name] = [title]
  }
  return acc;
}, {})


// Option to display as a string instead of array 

const result = YOUR_ARRAY.reduce((acc, val) => {
  const { name, title } = val;
  if (acc[name]) {
    acc[name] += (` | ${title}` )
  } else {
    acc[name] = title
  }
  return acc;
}, {})

【讨论】:

  • 非常感谢,但我有一个问题,它确实会在对象中改变它,如果我需要它们作为单个值,或者我们可以说合并属性的所有标题并将它们保存在单个变量中单个字符串。例如 var size = S|M|L|XL;
  • 或者如果我可以将所有标题合并为一个对象的单个节点。
  • 通过合并它们而不是只将一个字符串分配给对象。
  • 我编辑了答案以显示连接title 值的选项
  • 例如 Size = Array("S|M|L|XL");而不是 Size= Array("S", "M", "L" , "XL");
【解决方案2】:

const array = [
    {name: "Size", title: "S"},
    {name: "Size", title: "XX"},
    {name: "Size", title: "2XL"},
    {name: "Select Your Fit", title: "Regular"},
    {name: "Select Your Fit", title: "Extra Soft"},
    {name: "Select Your Fit", title: "Premium"}
];


const {Size, 'Select Your Fit': selectyourfit } = array.reduce((acc, {name, title}) => {
    acc[name] = acc[name] ? acc[name]+` | ${title}` : title;
    return acc;
}, {});

console.log("Size : ", Size);
console.log("Select Your Fit : ", selectyourfit)

【讨论】:

    猜你喜欢
    • 2022-11-18
    • 1970-01-01
    • 1970-01-01
    • 2020-05-30
    • 2021-10-31
    • 1970-01-01
    • 2021-03-13
    • 2020-11-23
    • 1970-01-01
    相关资源
    最近更新 更多