簡體   English   中英

使用 Javascript map() 函數返回 JSON 對象的子集

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM