2015-04-23 2 views
-1

Моя программа возвращает значения в одном массиве: ["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> 
+0

Вы действительно должны удалить эти 'ProductID =' и 'цена =' задания из вашего массива буквального – Bergi

ответ

2

Прежде всего, don't use for in enumerations on arrays.

Теперь есть два способа приблизиться к желаемому результату. Во-первых, вы можете просто изменить существующий массив предваряя этот пункт, чтобы каждый из них:

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

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

Если это не то, что вы хотите, вы бы построить новый массив скорее:

var _paq = […]; // somewhere 

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

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

Вместо concat, можно, конечно, использовать второй цикл:

var _paq = […]; // somewhere 

for (var i=0; i<products.length; i++) { 
    var product = products[i], 
     temp = []; 
    temp.push("addEcommerceItem"; 
    for (var j=0; j<product.length; j++) 
     temp.push(product[j]); 
    _paq.push(temp); // push each array individually 
} 

console.log(JSON.stringify(_paq)); 
+0

Все, что я хочу, находится внутри _paq.push ([], []); NOT _paq.push ([[], []]); Несмотря на то, что «addEcommerceItem» выглядит как строка, это функция из другой программы, которая включает оболочку []. Поэтому вложенные массивы в этом случае не будут работать. – Jgunzblazin

+0

Пожалуйста, смотрите снова. Что я делаю в моем коде **, это ** '_paq.push ([], [])'! Другого гнездования нет, кроме '_paq'! Это только массив оберток, который поставляется с вашей «функцией»! – Bergi

+0

Пожалуйста, ознакомьтесь с исходным кодом, указанным выше. То, что вы говорите, неверно. Сообщение на JS Bin. _paq - пустой массив []. Ваши кодовые выходы [[], []]. (Попробуйте!) Итак, теоретически то, что вы на самом деле делаете, это [[[], []]]. Поэтому выход должен быть [], [] только для того, чтобы он _paq.push ([], []); вот так. – Jgunzblazin

0

Для достижения желаемого выхода, я изменил for-loop к splice в дополнительной ценности для products массива вместо толкая его к testArray.

var testArray = new Array(); 

for (var i=0; i < products.length; i++){ 
    products[i].splice(0,0,'addEcommerceItem'); 
    testArray.push(products[i]); 
} 

JS Бин демонстрирует результаты можно увидеть here.

+0

СММ , no good, this return: [Array [0], Array [0], Array [2], "addEcommerceItem", Array [2]] – Jgunzblazin

+1

Я создал [этот JS Bin] (http://jsbin.com/foyucidove/1/edit? html, console), чтобы продемонстрировать результаты, которые я вижу. Можете ли вы показать мне, как вы получаете свои результаты? – OhBeWise

+1

Вы правы. Я неправильно указал его. Однако это создает многомерный массив: [["addEcommerceItem", "hat", 29.99], ["addEcommerceItem", "belt", 19.99]]; Я стараюсь: (["addEcommerceItem", "hat", 29.99], ["addEcommerceItem", "belt", 19.99]); – Jgunzblazin

0

Просто напишите, что вы хотите, чтобы произошло: заменить каждый суб-массив с его элементами preprended по "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] ] 

Для вызова _paq.push с каждым элементом результирующего массива в качестве одного аргумента, то

_paq.push.apply(_paq, transform(products)) 

В ES6:

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

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

какая головная боль для меня. Я не пытаюсь создать вложенный массив. Мне нужно вставить отдельный массив в переменную следующим образом: _paq.push ([], []); – Jgunzblazin

+0

Ваше выражение «нажимать отдельный массив в переменную» чрезвычайно сложно понять. Вы хотите сделать '_pag.push.apply (_paq, transform (products))'? –

+0

Берги ударил ноготь по голове. Я просто пытаюсь добавить объекты массива в _paq.push(); – Jgunzblazin

Смежные вопросы