[英]Return subset of JSON Object using Javascript map() function
我的問題是,是否有一種簡單的方法可以返回包含所有“列”的 JSON 對象子集,而不是單獨指定要返回的“列”。
特別是,我有一個轉換為 JSON 的多列 csv 文件。 下面的函數返回該對象的一個子集 - 如果滿足某些條件(在這種情況下匹配 'Name'),則只返回兩個“列”(作為另一個對象):
var firstSubArr = json.map(function(s) {
if (s.Name === RegName) {
return {
'Price': s.Price,
'Name': s.Name
}
}
}).filter(function(n) {
return n !== undefined
});
是否有一種更簡單的方法可以將 json 對象中的“所有列”作為對象返回,而不是這樣:
return {'Price':s.Price,'Name':s.Name}?
評論:從csv轉換后只是一個簡單的JSON結構,例如:
`[ {Name:'Sydney', Price:123, Type:'xyz', etc. 20 more... }, etc. ]`
評論 2:是的過濾器可能是一些人建議的選項,但如果我的情況有點復雜,例如:
var fullPeriodArr= json.map( function (s) { if(moment(s.Date,"YYYYMMDD").isSameOrBefore(currd) && moment(s.Date,"YYYYMMDD").isSameOrAfter(fullPeriodStart) && (s.Type==sid || s.Type==sid2)&& s.Name===RegName){return [s.Price, s.Name] } }).filter( function (n) { return n!== undefined });
解決方案:
3位回答者都提供了線索,謝謝! 它只是“返回匹配條件的對象數組中的每個對象”,或者簡單地:
var firstSubArr= json.filter( s => (moment(s.Date,"YYYYMMDD").isSameOrBefore(currd) && moment(s.Date,"YYYYMMDD").isSameOrAfter(fullPeriodStart) && (s.Type==sid || s.Type==sid2) && s.Name===RegName) );
. 其中時間范圍 'from... to' 是使用 moment.js lib 評估的,日期、類型和名稱是對象鍵。
秘密布丁是復雜條件周圍的圓括號 ( )。
Javascript 變得多么簡潔:不需要獲取 .length,也不需要使用 'for' 或 'while' 循環,不需要 'if... else' 語句,或者不需要存儲中間結果,也不需要 'return'。 箭頭取代了這一切!
然后你可以訪問例如。 價格“列”作為用於匯總計算的數字數組(例如值的總和):
var firstSubArrPrice=firstSubArr.map(t => t.Price );
擺脫map()
,僅使用filter()
,結果中將具有原始對象
var firstSubArr = json.filter(function(s) {
return s.Name === RegName
});
我知道您想返回具有與條件匹配的特定屬性的對象。您可以使用reduce()
var firstSubArr = json.reduce((ac,{Name,Price}) => a.Name === RegName ? [...ac,{Name,Price}] : ac, []);
如果您不想只使用Name,Price
和所有帶有調用名稱的屬性。 然后單獨使用filter()
var firstSubArr = json.filter(x => x.Name === RegName)
怎么樣:
var firstSubArr = json.filter( x => x.Name ===RegName)
要在 JavaScript 中實現,我建議使用以下代碼:
var valueNeedly = json.filter(function(s) {
return s.value === searchValue
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.