GVKun编程网logo

javascript – 如何组合多个数组中的值以创建新的组合数组(多个数组合并成一个数组js)

14

如果您对javascript–如何组合多个数组中的值以创建新的组合数组感兴趣,那么本文将是一篇不错的选择,我们将为您详在本文中,您将会了解到关于javascript–如何组合多个数组中的值以创建新的组

如果您对javascript – 如何组合多个数组中的值以创建新的组合数组感兴趣,那么本文将是一篇不错的选择,我们将为您详在本文中,您将会了解到关于javascript – 如何组合多个数组中的值以创建新的组合数组的详细内容,我们还将为您解答多个数组合并成一个数组js的相关问题,并且为您提供关于javascript - 关于组合几个数组的问题、JavaScript / JSON – 从多个数组中获取具有相同键的值的总平均值、javascript – AngularJS在属性上组合数组中的对象、javascript – 从一个数组中删除字符串(如果存在于另一个数组中)的有价值信息。

本文目录一览:

javascript – 如何组合多个数组中的值以创建新的组合数组(多个数组合并成一个数组js)

javascript – 如何组合多个数组中的值以创建新的组合数组(多个数组合并成一个数组js)

我正在购物网站,并希望让我的用户能够根据他们指定的变体动态创建多个产品.我允许这些用户创建任意数量的“类型”,这些类型定义了大小,颜色或容量等内容.但是用户可以指定它的名称和所需的类型数.

在每个Type中,我还允许用户配置多个Choices.例如,类型Size可能有Small,Medium,Large选项.用户再次可以定义这些字段的名称,并且对它们可以创建的字段数量不应有任何限制.

用户完成产品定义后,我有一个类型数组,每个类型内部都有一个数组供选择.

作为示例,移动电话产品可能具有以下类型和选择结构:

[
  {
  'id': 1,'type': 'Colour','options': ['Black','White','Gold']
  },{ 
  'id': 2,'type': 'Size','options': ['Standard','Large"']
  },{ 
  'id': 3,'type': 'Capacity','options': ['32GB','64GB','128GB']
  }
]

根据这些数据,我想创建18(3 * 2 * 3)种可能的产品变体,用户可以为其指定特定的价格,重量或SKU选项.最终得到以下变体:

Black - Standard - 32GB
Black - Standard - 64GB
Black - Standard - 128GB
Black - Large - 32GB
Black - Large - 64GB
Black - Large - 128GB
White - Standard - 32GB
White - Standard - 64GB
White - Standard - 128GB
White - Large - 32GB
White - Large - 64GB
White - Large - 128GB
Gold - Standard - 32GB
Gold - Standard - 64GB
Gold - Standard - 128GB
Gold - Large - 32GB
Gold - Large - 64GB
Gold - Large - 128GB

我可以想象在这样的数组中:

[
  {
    'variant_id': 1,'options':
      [{ 'type': 'Colour','choice': 'Black' },{ 'type': 'Size','choice' 'Standard' },{ 'type': 'Capacity','choice' '32G' }]
  },{
    'variant_id': 2,'choice' '64GB' }]
  },{
    'variant_id': 3,'choice' '128GB' }]
  }
<snip>

我的问题是我如何创建一个循环,允许我迭代各种类型和选择来创建我的最终变体列表?我很难想象我将如何提供这个功能.

解决方法

请尝试以下代码.它完全符合你想要的纯JavaScript.
generateOutput函数在循环中为第一个元素的选项调用,然后generateOutput函数被称为递归生成所需的结果.写作中的逻辑难以解释.只需添加调试器并了解流程.祝你好运.

var data = [{
  'id': 1,'Gold']
},{
  'id': 2,'Large"']
},{
  'id': 3,'128GB']
}];



function generateOutput(dataIndex,optionIndex) {
  var option,result,i,subResult;
  option = {
    type: data[dataIndex].type,choice: data[dataIndex].options[optionIndex]
  };

  if (dataIndex == data.length - 1) {
    result = {
      isLast: true,options: [option]
    }
    return result;
  }

  result = [];
  for (i = 0; i < data[dataIndex + 1].options.length; i++) {
    subResult = generateOutput(dataIndex + 1,i);
    if (subResult.isLast) {
      subResult.options.unshift(option);
      result.push(subResult.options);
    } else {
      result = result.concat(subResult);
    }
  }

  if (!subResult.isLast) {
    for (var j = 0; j < result.length; j++) {
      result[j].unshift(option);
    }
  }

  return result;
}

function getoutput() {
  var result = [],option,i;
  for (i = 0; i < data[0].options.length; i++) {
    option = {
      type: data[0].type,choice: data[0].options[i]
    };
    var subResult = generateOutput(0,i);
    if (subResult.isLast) {
      result.push(subResult.options);
    } else {
      result = result.concat(subResult);
    }
  }
  
  var output = [];
  for (i = 0; i < result.length; i++) {
    output.push({
      variant_id: (i+1),options: result[i]
    })
  }
  return output;
}

console.log(getoutput());

javascript - 关于组合几个数组的问题

javascript - 关于组合几个数组的问题

数组一:A1 A2 A3 A4 A5
数组二:B1 B2 B3 B4 B5
数组三:C1 C2 C3 C4 C5
.
.
.
数组N: N1 N2 N3 N4 N5

根据上面的数组,组合五个数的数列:位置1 位置2 位置3 位置4 位置5。
标记为1的放在位置1 如 A1 B1 C1 ...放在第一位
标记为2的放在位置2 如 A2 B2 C2 ...放在第二位
.....依此类推

数列至少要有3位跟其他数列不同的数:
如:数列:A1 B2 A3 B4 C5
数列:B1 A2 B3 A4 C5

以下是组合的一部分:
A1 A2 A3 A4 A5
B1 B2 B3 B4 B5
C1 C2 C3 C4 C5
C1 C2 C3 C4 C5
A1 B2 A3 B4 C5
B1 A2 B3 A4 C5

用程序语言按以上要求分组,怎么写?? c/c++/java/php/js

回复内容:

数组一:A1 A2 A3 A4 A5
数组二:B1 B2 B3 B4 B5
数组三:C1 C2 C3 C4 C5
.
.
.
数组N: N1 N2 N3 N4 N5

根据上面的数组,组合五个数的数列:位置1 位置2 位置3 位置4 位置5。
标记为1的放在位置1 如 A1 B1 C1 ...放在第一位
标记为2的放在位置2 如 A2 B2 C2 ...放在第二位
.....依此类推

数列至少要有3位跟其他数列不同的数:
如:数列:A1 B2 A3 B4 C5
数列:B1 A2 B3 A4 C5

以下是组合的一部分:
A1 A2 A3 A4 A5
B1 B2 B3 B4 B5
C1 C2 C3 C4 C5
C1 C2 C3 C4 C5
A1 B2 A3 B4 C5
B1 A2 B3 A4 C5

用程序语言按以上要求分组,怎么写?? c/c++/java/php/js

其实问题描述可以简化成,对所有5位N进制数进行分组,要求每组中任意两个数字至少有3位不同。

这个问题是有确定解的吗?

例如 X=00000, Y=00001, Z=11100

立即学习“Java免费学习笔记(深入)”;

XY不能是一组,但是XZ可以是一组,YZ也可以是一组,那么Z究竟属于哪一组?

是否允许一组只有一个数字?如果不允许,还有解吗?如果允许,那么投机一点的方法,就是每个数字一组。

JavaScript / JSON – 从多个数组中获取具有相同键的值的总平均值

JavaScript / JSON – 从多个数组中获取具有相同键的值的总平均值

我收到来自后端的实时响应,其中包含以下JSON(几乎每秒):

一个阵列:

 {
"newUpdate": [ 
{
    "id": "TP", 
    "val" : 3
},
{ 
    "id": "TPE20", 
    "val" : 3
}]
 }

另一个数组(一秒或更短)

 {
"newUpdate": [ 
{
    "id": "CRK", 
    "val" : 24
},
{ 
    "id": "TPE20", 
    "val" : 44
}]
 }

我几乎每一秒都得到上面的JSON知道每次它带有不同的值和id,并且数组本身没有特定的大小.

好吧,我想要做的是获得具有相同键’id’的值的平均值.

例如,对于上面的数组,TPE20的平均值是:

(3+44)/2 =23.2 (as it computes the average for the id : TPE20)

然后它应该在这里显示它(例如使用JQuery)[想想股票市场中的实时平均值]

<div id="TPE20"></div>

目前,使用下面的for循环,我打印上面列出的JSON:

for(var i in load.updates){
var id =     load.newUpdate[i].id;
updatesMap[id] = load.newUpdate[i].value;
var valueOfID = newUpdate[id];
}

挑战在于我一次接收大量数组(1 / sec),每个数组包含不同的“id”和“val”,我真的不知道如何使用上面描述的方式计算平均值!

解决方法:

只需使用一个对象,其中键表示数组对象的ID,值为对象,包含这些ID的计数,总数和平均值.

当您收到一个新数组时,只需更新该对象:

function updateObj(arr) {
  arr.forEach(function(el) {
    var key = el.id;
    obj[key] = obj[key] || { count: 0, total: 0, avg: 0 };
    obj[key].count++;
    obj[key].total += el.val;
    obj[key].avg = obj[key].total / obj[key].count;
  });
}

Here’s a simulation with setInterval每秒向函数发送一个数组,然后在控制台中显示完成的对象.

javascript – AngularJS在属性上组合数组中的对象

javascript – AngularJS在属性上组合数组中的对象

我有一大堆对象(1500),并且对象匹配其中一个属性.因此可以减少对象的总数,例如在ng-repeat中获得更好的性能.
我对AngularJS和JS本身有点新意,所以非常感谢帮助!

我的对象数组(简化)

myArray = [
    {
        "role": "user111","operation": "create","concept": "folder"
    },{
        "role": "user111","concept": "task"
    },"operation": "delete",{
        "role": "user222","concept": "task"
    }
]

期望的输出

dreamArray = [
    {
        "role": "user111","operation": {
               "create": ["folder","task"],"delete": ["task"]
                      }
    },"operation": {
                   "create": ["folder","delete": ["task"]
                      }
    }
]

解决方法

您可以使用forEach()循环和thisArg参数执行此操作.

var myArray = [{"role":"user111","operation":"create","concept":"folder"},{"role":"user111","concept":"task"},"operation":"delete",{"role":"user222","concept":"task"}]

var result = [];
myArray.forEach(function(e) {
  if(!this[e.role]) {
   this[e.role] = {role: e.role,operation: {[e.operation]: [e.concept]}}
    result.push(this[e.role]);
  } else {
    var op = this[e.role].operation[e.operation]
    if(op) op.push(e.concept)
    else this[e.role].operation[e.operation] = [e.concept]
  }
},Object.create(null))


console.log(result)

javascript – 从一个数组中删除字符串(如果存在于另一个数组中)

javascript – 从一个数组中删除字符串(如果存在于另一个数组中)

这是一个相当基本的问题,但我正在寻找一个最佳解决方案.我有2个javascript字符串数组.让我们说

A: ["Stark","Targaryen","Lannister","Baratheon"]
B: ["Greyjoy","Tyrell","Stark"]

由于“Stark”重复,我想从数组A中删除它,我的结果应该是(保留排序)

A: ["Targaryen","Baratheon"]

我真的不关心第二个数组B.核心javascript或jQuery中有什么东西可以帮助我吗? PS:不要使用IF语句发布嵌套for循环.可能更聪明的东西:)

最佳答案
一个完整的jquery解决方案:

var a = ["Stark","Baratheon"];
var b = ["Greyjoy","Stark"];

var result = $.grep(a,function(n,i) {
    return $.inArray(n,b) < 0;
});

alert(result);​

今天关于javascript – 如何组合多个数组中的值以创建新的组合数组多个数组合并成一个数组js的讲解已经结束,谢谢您的阅读,如果想了解更多关于javascript - 关于组合几个数组的问题、JavaScript / JSON – 从多个数组中获取具有相同键的值的总平均值、javascript – AngularJS在属性上组合数组中的对象、javascript – 从一个数组中删除字符串(如果存在于另一个数组中)的相关知识,请在本站搜索。

本文标签: