Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
乘法2数组javascript/jquery_Javascript_Jquery_Html_Arrays - Fatal编程技术网

乘法2数组javascript/jquery

乘法2数组javascript/jquery,javascript,jquery,html,arrays,Javascript,Jquery,Html,Arrays,我在js中有两个对象数组,如下所示: Array1 0:Object name: "name1" value:7 1:Object name: "name2" value:5 2:Object name: "name3" value:6 Array2 0:Object name: "name1" value:3 1:Object name: "name2"

我在js中有两个对象数组,如下所示:

Array1
   0:Object
      name: "name1"
      value:7
   1:Object
      name: "name2"
      value:5
   2:Object
      name: "name3"
      value:6

Array2
   0:Object
      name: "name1"
      value:3
   1:Object
      name: "name2"
      value:4
   2:Object
      name: "name3"
      value:8
我想创建第三个数组,它将包含来自array1和array2的乘法值的结果(不需要是objects数组-只能包含int值)。这意味着:

Array1        Array2        Array3
value:7  *    value:3   =   value:21
value:5  *    value:4   =   value:20
value:6  *    value:8   =   value:48
你们知道一个简单而好的方法来创建第三个表并在网站上显示它吗?
提前感谢:)

您可以使用LINQ的幂函数连接两个结果集,并选择第三列作为两个源列相乘的结果。(就像在SQL中一样)

LINQ的JavaScript实现在这里非常方便。查看LinqJS:

这里有一篇关于它的好文章


$Linq看起来也很有前途

纯javascript,不需要jQuery:

函数addArrays(arr1、arr2、prop){
var func=函数(当前值){
返回货币[道具];
}
var arr1v=arr1.map(func),arr2v=arr2.map(func),output=[];
arr1v.forEach(功能(当前,i){
输出[i]=arr1v[i]*arr2v[i];
});
返回输出;
}

addArrays([{value:7},{value:5},{value:6}],{value:3},{value:4},{value:8}],“value”)/->[21,20,48]
您可以通过多种方式完成:

选项1:纯JavaScript嵌套循环 只需使用两个嵌套循环,就可以使用纯JavaScript实现。在大型阵列上速度相对较慢,但相当简单

选项2:带有预索引的纯JavaScript循环 您可以对其中一个数组进行预索引,以快速访问它

选项3:使用特殊库 作为替代方案,您可以使用特殊的SQL或LINQ(如其他答案中所述)库,例如,库自动在第二个数组上创建索引,以加快访问速度,避免不必要的循环

性能:您可以在中比较加入10000 x 10000数组(简单嵌套循环和预索引)时所有三种变体的速度。选项2是最快的

请参阅下面的工作代码段以及所有三个选项,或者使用它

(免责声明:我是Alasql的作者)

var Array1=[{name:'name1',value:7},{name:'name2',value:5},{name:'name3',value:6}];
var Array2=[{name:'name1',value:3},{name:'name2',value:4},{name:'name3',value:8}];
// 1. 带有嵌套循环的纯JavaScript选项
var Array3=[];
对于(var i=0;i试试这个

var ar3 = [];
for(var i = 0; i <= array1.length; i++){
    var valu = array1[i].value * array2[i].value;
    ar3[i] = valu;
}
var ar3=[];

对于(var i=0;i真的,我想知道为什么这里有一个复杂的答案,而Javascript是一种函数式编程语言:

只有一行:

array3= array1.map(function(e,i){return {value : (e.value * array2[i].value)}; }) ; 

这个问题是关于数组的简单逐行乘法,而不是关于SQL的两个数组的笛卡尔积。下面是两个数组的SQL积的示例:它给出了9(3乘3)个元素数组,而不是3,但是没有连接操作的键。我完全错误地解释了这个问题-我很抱歉:)我错了!我错过了“名称”问题中的关键字段。我刚刚发布了另一个纯JS和SQL答案的答案。当然,这可以通过LINQ库来完成。再次抱歉!