Javascript 返回多个数组中的值

Javascript 返回多个数组中的值,javascript,arrays,multidimensional-array,Javascript,Arrays,Multidimensional Array,我的程序返回单个数组中的值:[“addEcommerceItem”,“hat”,29.99,“addEcommerceItem”,“belt”,19.99] 我正在努力实现([“addEcommerceItem”,“hat”,29.99],“addEcommerceItem”,“belt”,19.99]) 有人能提出建议吗 products = [ ["hat", 29.99], ["belt", 19.99] ] var testArray = new Array(); f

我的程序返回单个数组中的值:[“addEcommerceItem”,“hat”,29.99,“addEcommerceItem”,“belt”,19.99]

我正在努力实现([“addEcommerceItem”,“hat”,29.99],“addEcommerceItem”,“belt”,19.99])

有人能提出建议吗

products = [
    ["hat", 29.99],
    ["belt", 19.99]
]

var testArray = new Array();

for(i in products){
    testArray.push('addEcommerceItem');
    testArray.push(products[i]);
}

var json = JSON.stringify(testArray);

<script type="text/javascript">
  var _paq = _paq || [];
  _paq.push(['trackPageView']);
  _paq.push(['enableLinkTracking']);
  _paq.push(json);
</script>
产品=[
[“帽子”,29.99],
[“皮带”,19.99]
]
var testArray=新数组();
对于(产品中的i){
testArray.push('addedCommerceitem');
测试推送(产品[i]);
}
var json=json.stringify(testArray);
变量| paq=| paq |[];
_paq.push(['trackPageView']);
_paq.push(['enableLinkTracking']);
_push(json);

为了获得您想要的输出,我将
for loop
修改为
products
数组附加值中的
拼接
,而不是将其推到
testArray

var testArray = new Array();

for (var i=0; i < products.length; i++){
    products[i].splice(0,0,'addEcommerceItem');
    testArray.push(products[i]);
}
var testArray=new Array();
对于(变量i=0;i
可以看到演示结果的JS箱。

首先

现在,有两种方法可以达到您想要的结果。首先,您可以简单地通过将该项前置到每个数组来更改现有数组:

for (var i=0; i<products.length; i++)
    products[i].unshift("addEcommerceItem");

console.log(JSON.stringify(products));

只需编写您希望发生的事情:将每个子数组替换为其由
“addEcommerceItem”
预处理的元素。您可以使用
concat

function prepend(item) { return ["addEcommerceItem"] . concat(item); }
或者,如果你愿意

function prepend(item) { item.unshift("addEcommerceItem"); return item; }
那就是

function transform(products) { return products . map(prepend); }
示例用法:

>> products = [ ["hat", 29.99], ["belt", 19.99] ]
>> transform(products)
<< [ ["addEcommerceItem","hat",29.99], ["addEcommerceItem","belt",19.99] ]
在ES6中:

var prepend   = item     => ["addEcommerceItem", ...item];
var transform = products => products . map(prepend);

_paq.push(...transform(products));

嗯,不好,这会返回:[Array[0],Array[0],Array[2],“addEcommerceItem”,Array[2]],我创建它是为了演示我看到的结果。你能告诉我你是如何得到结果的吗?你是对的。我打错了。然而,这会产生多维数组:[[“addEcommerceItem”,“hat”,29.99],“addEcommerceItem”,“belt”,19.99];我正在努力实现:([“addEcommerceItem”,“hat”,29.99],“addEcommerceItem”,“belt”,19.99]);所以基本上([],[]);啊,我明白了。我误读了你的观点,认为你的意图是多维度的。这是我的疏忽。你真的应该从你的数组文字中删除那些
productid=
price=
赋值对我来说真是太头疼了。我不想创建嵌套数组。我需要将单独的数组推入变量,如下所示:paq.push([],[]);您的表达式“push separate array into variable”非常难以理解。你的意思是做
\u pag.push.apply(\u paq,transform(products))
?Bergi一针见血。我只是尝试将数组对象添加到paq.push();我只想在_paq.push([],[])内;不推送([[],[]);尽管“addEcommerceItem”看起来是一个字符串,但它是另一个包含包装器[]的程序的函数。这就是嵌套数组在这种情况下无法工作的原因。请重新查看。我的代码所做的就是推送([],[])
!除了
\u-paq
本身,没有其他嵌套!只有包装器数组与“函数”一起提供!请看上面的原始代码。你说的不是真的。在JS-Bin上发布_paq是一个空数组[]。您的代码输出[…],[…]。(试一试!)所以理论上你实际生产的是[[],[]]。这就是为什么输出需要是[],[],只有这样它才能被推送([],[]);如前所述,我认为JSON.stringify在这里不起作用,因为它不会显示相邻的两个结构。这是一个基本输出的示例:
>> products = [ ["hat", 29.99], ["belt", 19.99] ]
>> transform(products)
<< [ ["addEcommerceItem","hat",29.99], ["addEcommerceItem","belt",19.99] ]
_paq.push.apply(_paq, transform(products))
var prepend   = item     => ["addEcommerceItem", ...item];
var transform = products => products . map(prepend);

_paq.push(...transform(products));