2017-09-11 55 views
0

數據源lodash - 對象轉變

var data = { 
    "2017-08-09": [ 
    { 
     "time": "09:00", 
     "available": true 
    }, 
    { 
     "time": "13:00", 
     "available": true 
    }, 
    { 
     "time": "13:30", 
     "available": true 
    }, 
    ] 
} 

需要的轉換

newData = [ "2017-08-09": ['09:00','13:00','13:30'] ] 

我曾嘗試以下:

function recursiveFunction(collection){ 
      var newData = []; 

    _.forOwn(collection, function(value, key){ 

     newData.push({key}); 
     value.map(item => { 
       if (item.available === true) newData.key = item.time 
     }) 
    }); 
    console.log(newData) 
}; 

但也不能令人信服:/

http://jsfiddle.net/oa6nbgpy/

+1

你的小提琴與問題中的代碼完全不同,你粘貼了錯誤的鏈接嗎? – user3080953

+0

哎呦!我想我做了,只是更新它:)謝謝 – Deano

回答

1

香草JS,使用Object#keys拿到鑰匙的數組,並使用Array#mapArray#filtercomputed property names其轉換爲對象:使用

var data = {"2017-08-09":[{"time":"09:00","available":true},{"time":"09:30","available":false},{"time":"11:30","available":true}],"2017-08-10":[{"time":"10:00","available":true},{"time":"10:30","available":false}]}; 
 

 
var result = Object.keys(data).map(function(key) { 
 
    return { 
 
    [key]: data[key] 
 
    .filter(function(o) { 
 
     return o.available; 
 
    }) 
 
    .map(function(o) { 
 
     return o.time; 
 
    }) 
 
    }; 
 
}); 
 

 
console.log(result);

+0

謝謝,我怎麼可以添加邏輯來處理'「可用」:false'?所以我只能列出時間''可用':真' – Deano

+1

在映射時間之前使用Array#過濾器。查看更新的示例。 –

2

跨值的Map mapValuesfilter只有available時間和採用時間map

var newData = _.mapValues(data, times => _.map(_.filter(times, 'available'), 'time'));