2014-10-26 2 views
0

У меня есть два массива. И я хочу обновить второй массив с данными первого массива, если найдутся те же данные. Вот мой первый массив:Обновить массив при обнаружении того же значения в Javascript

var namaFile = [ 
      { 
       billingID: "90009388", 
       customerID: "C20121121221327_249", 
       name: "201409011141106_082895250262" 
      }, 
      { 
       billingID: "90009400", 
       customerID: "7885000000007804", 
       name: "201410201141125_08287045931" 
      }, 
      { 
       billingID: "90009388", 
       customerID: "C20121121221327_249", 
       name: "201410011171208_082895250262" 
      } 
     ]; 

Здесь второй массив:

var emailAddr = [ 
      { 
       customerID: "C20121121221327_249", 
       email: "[email protected]" 
      }, 
      { 
       customerID: "7885000000007804", 
       email: "[email protected]" 
      } 
     ]; 

Вот мой код, но не будет работать.

for (var i = 0; i < namaFile.length; i++) { 
      var files = []; 
      for (var j = 0; j < emailAddr.length; j++) { 
       if (namaFile[i].customerID == emailAddr[j].customerID) { 
        files.push(namaFile[i].name); 
        emailAddr[j]['files'] = files; 
       } 
      } 
     } 

     console.log(emailAddr); 

Мой ожидаемый результат таков:

var emailAddr = [ 
      { 
       customerID: "C20121121221327_249", 
       email: "[email protected]", 
       files : [ 
        "201409011141106_082895250262","201410011171208_082895250262" 
       ] 
      }, 
      { 
       customerID: "7885000000007804", 
       email: "[email protected]", 
       files : [ 
        "201410201141125_08287045931" 
       ] 
      } 
     ]; 

Как создать этот результат? Спасибо.

ответ

1

своп for(...) {. Example

for (var j = 0; j < emailAddr.length; j++) { 
    var files = []; 
    for (var i = 0; i < namaFile.length; i++) { 
     if (namaFile[i].customerID == emailAddr[j].customerID) { 
      files.push(namaFile[i].name); 
      emailAddr[j]['files'] = files; 
     } 
    } 
} 
+0

это работает: D я пропустить. – fanjavaid

1

emailAddr[j]['files'] = files; этой линией вы перезапись emailAddr[j]['files'] каждый раз

var namaFile = [{ 
 
    billingID: "90009388", 
 
    customerID: "C20121121221327_249", 
 
    name: "201409011141106_082895250262" 
 
}, { 
 
    billingID: "90009400", 
 
    customerID: "7885000000007804", 
 
    name: "201410201141125_08287045931" 
 
}, { 
 
    billingID: "90009388", 
 
    customerID: "C20121121221327_249", 
 
    name: "201410011171208_082895250262" 
 
}]; 
 

 
var emailAddr = [{ 
 
    customerID: "C20121121221327_249", 
 
    email: "[email protected]" 
 
}, { 
 
    customerID: "7885000000007804", 
 
    email: "[email protected]" 
 
}]; 
 

 
for (var i = 0; i < namaFile.length; i++) { 
 
    var files = []; 
 
    for (var j = 0; j < emailAddr.length; j++) { 
 
    if (emailAddr[j]['files'] == null) 
 
     emailAddr[j]['files'] = []; 
 
    if (namaFile[i].customerID == emailAddr[j].customerID) { 
 
     
 
     emailAddr[j]['files'].push(namaFile[i].name); 
 
    } 
 
    } 
 
} 
 

 
console.log(emailAddr);

0

Привет Вы можете использовать подчеркивание JS, который может быть хорошим вариантом для вас, если у вас есть много объект/данные в вашем коде.

, а затем ваш код может выглядеть следующим образом:

_.each(emailAddr, function(customer) { var files = _.where(namaFile, {customerID: customer.customerID}); customer.files = _.map(files, function(file) { return file.name; }); });

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