2017-02-11 3 views
0

Я хочу сохранить все данные в новый массив в зависимости от его типа. Если это «хранилище», данные должны храниться в массиве магазинов [], если тип является клиентом, данные должны храниться в массиве клиентов и т. Д. Я довольно новичок в Javascript, поэтому не уверен, что Я правильно его храню.Добавление элементов из одного массива в другой

var allData = [ 
{type:"store", data:{store_id: 297, name: "Scotiabank - Main Branch", address_id: 1023}}, 
{type:"store", data:{store_id: 614, name: "Scotiabank - Hamilton", address_id: 1984}}, 
{type:"customer", data:{customer_id: 26, store_id:297, first_name: "Dave", last_name: "Bennett", email: "[email protected]", address_id: 4536, add_date: null}}, 
{type:"customer", data:{customer_id: 59, store_id:193, first_name: "John", last_name: "Stevens", email: "[email protected]", address_id: 2473, add_date: null}}, 
{type:"customer", data:{customer_id: 29, store_id:614, first_name: "Sarah", last_name: "Pym", email: "[email protected]", address_id: 1611, add_date: null}}, 
{type:"address", data:{address_id: 1023, address: "2895 Yonge St.", city:"Toronto", province:"ON", postal_code:"L4C02G"}}, 
{type:"address", data:{address_id: 1984, address: "3611 Main St. West", city:"Hamilton", province:"ON", postal_code:"R5O8H5"}}, 
]; 


var CustomerDB = 
{ 
    customer:[], 
    addresses:[], 
    stores:[], 

    add:function insertData (allData) 
    { 
     for (var i = 0; i < allData.length; i++) 
      { 
       if (type =="store") 
        { 
         stores = allData.slice(i); 

        } 
       else if (type == "customer") 
        { 
         customer = allData.slice(i); 
        } 
       else if (type == "address") 
        { 
         addresses = allDara.slice(i); 
        } 
      } 
    } 
} 
+1

как насчет 'фильтра()'? 'matchedData = allData.filter (data => {return (data.type === 'store');});' then 'stores.push (matchedData);' – mickdev

+0

Одна из проблем заключается в том, что 'allData.slice (i) 'сдвигает все последующие элементы вниз (потому что вы удаляете элемент), что испортило ваш индекс' i'. – qxz

+0

@mickdev Не хотите, чтобы 'stores = stores.append (matchedData);' вместо 'stores.push (matchedData);'? – qxz

ответ

4
var CustomerDB = { 
    customer: [], // should be exactly like the type (to make it easier to add) 
    address: [],  // this too (should be adress not adresses) 
    store: [],  // ... 

    add: function insertData(allData) { 
    allData.forEach(function(d) { 
     this[d.type].push(d); 
    }); 
    } 
} 

forEach будет цикл по каждому объекту в allData массиве. Для каждого элемента this[d.type] будет оцениваться до this["customer"], если, например, тип customer, который является точно this.customer (массив для клиентов).

0

Вы можете попробовать запустить функцию вне CustomerDB:

var CustomerDB = 
{ 
    customer:[], 
    addresses:[], 
    stores:[], 
} 

var insertData = function(){ 
    for (var i = 0; i < allData.length; i++) 
    //console.log(allData[i]); 
     { 
      if (allData[i]['type'] == "store") 
       { 
        CustomerDB.stores.push(allData[i]); 

       } 
      else if (allData[i]['type'] == "customer") 
       { 
        CustomerDB.customer.push(allData[i]); 
       } 
      else if (allData[i]['type'] == "address") 
       { 
        CustomerDB.addresses.push(allData[i]); 
       } 
     } 
}(); 

Вот в codepen: http://codepen.io/giannidk/pen/egbmRL?editors=0012

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