2016-02-17 36 views
0

如何在underscore.js中編寫下面的代碼。如何使用underscore.js編寫

for (var i = 0; i < res.hList.h.length; i++) { 
    if (res.hList.h[i].code == code) { 
    res.hList.h[i].packList.pack = d.h.packList.pack; 
    break; 
    } 
} 

回答

-1

var response = { 
 
    hotelList: { 
 
    hotel: [ 
 
     { availablePackageList: { package: 1 }, code: 1 }, 
 
     { availablePackageList: { package: 2 }, code: 2 }, 
 
     { availablePackageList: { package: 3 }, code: 3 }, 
 
     { availablePackageList: { package: 4 }, code: 4 } 
 
    ] 
 
    } 
 
}; 
 

 
var data = { 
 
    hotel: { 
 
    availablePackageList: { package: 42 } 
 
    } 
 
}; 
 

 
var code = 3; 
 

 
// This code will iterate over all hotels 
 
_.each(response.hotelList.hotel, function(hotel) { 
 
    if (hotel.code == code) { 
 
    hotel.availablePackageList.package = data.hotel.availablePackageList.package; 
 
    } 
 
}); 
 

 
/* Preferred solution: find first occurrence 
 

 
// find hotel with code 3 
 
var foundHotel = _.find(response.hotelList.hotel, function(hotel) { 
 
    return hotel.code == code; 
 
}); 
 

 
// if found - update package 
 
if (foundHotel) { 
 
    foundHotel.availablePackageList.package = data.hotel.availablePackageList.package; 
 
} 
 

 
*/ 
 

 
document.write('<pre>'); 
 
document.write(JSON.stringify(response, null, 2)); 
 
document.write('</pre>');
<script src="//cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>

+0

@鮑勃海綿,有沒有什麼辦法既在一個功能結合起來? –

+0

我已經更新了我的答案 –

+0

@ bob-sponge,它轉換爲數組,不保留對象。 **回覆** Object {transaction:Object,totalRecords:148,hotelList:Object} ** foundHotel ** Array [148] –

0

檢查underscore documentation的收藏功能,each

_.forEach(response.hotelList.hotel, function (hotel) { 
    if (hotel.code === code) { 
     hotel.availablePackageList.package = data.hotel.availablePackageList.package; 
    } 
}) 

在ES6,語法會很相似(和你或許應該學習它):

response.hotelList.hotel.forEach(function (hotel) { 
    if (hotel.code === code) { 
     hotel.availablePackageList.package = data.hotel.availablePackageList.package; 
    } 
}); 
0

您可以使用findWhere,因爲你是第一個被發現後斷裂。試試這樣:

_.findWhere(response.hotelList.hotel, {code :yourcode}).availablePackageList.package = data.hotel.availablePackageList.package; 
0

_.find從你提供的列表中查找並返回符合規範的第一個項目。

var match = _.findWhere(response.hotelList.hotel, { code: code }) 
match.availablePackageList.package = data.hotel.availablePackageList.package; 

http://underscorejs.org/#findWhere