如何使用Underscore.js库重写此函数?

问题描述 投票:-3回答:2

需要为此对象进行一些数据转换:

let states = [{
    "status": "up",
    "timefrom": 1551271539,
    "timeto": 1551284429
  },
  {
    "status": "down",
    "timefrom": 1551284429,
    "timeto": 1551284489
  },
  {
    "status": "up",
    "timefrom": 1551284489,
    "timeto": 1551294149
  },
  {
    "status": "down",
    "timefrom": 1551294149,
    "timeto": 1551294269
  },
  {
    "status": "up",
    "timefrom": 1551294269,
    "timeto": 1551876329
  }
]

let newStates = states.map(state => {
  let obj = {};
  obj[state.status] = [state.timefrom, state.timeto];
  return obj;
})

console.log(newStates);

我的目标是返回一个对象数组,其中的对象类似于{up:[1551271539,1551284429]}

javascript ecmascript-6 underscore.js
2个回答
0
投票

使用下划线,您可以编写如下相同的内容:

let states = [{
    "status": "up",
    "timefrom": 1551271539,
    "timeto": 1551284429
  },
  {
    "status": "down",
    "timefrom": 1551284429,
    "timeto": 1551284489
  },
  {
    "status": "up",
    "timefrom": 1551284489,
    "timeto": 1551294149
  },
  {
    "status": "down",
    "timefrom": 1551294149,
    "timeto": 1551294269
  },
  {
    "status": "up",
    "timefrom": 1551294269,
    "timeto": 1551876329
  }
]

let newStates  = _.map(states, (state) => {
  const obj = new Object();
  obj[state.status] = [state.timefrom, state.timeto];
  return obj;
})

console.log(newStates)
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.9.1/underscore-min.js"></script>

它与问题中的基本相同,只是包含在_.map函数中


0
投票

@ nircraft的方式已经足够好了,但这也应该有所帮助。运行代码段后检查您的控制台。

let states = [{
    "status": "up",
    "timefrom": 1551271539,
    "timeto": 1551284429
  },
  {
    "status": "down",
    "timefrom": 1551284429,
    "timeto": 1551284489
  },
  {
    "status": "up",
    "timefrom": 1551284489,
    "timeto": 1551294149
  },
  {
    "status": "down",
    "timefrom": 1551294149,
    "timeto": 1551294269
  },
  {
    "status": "up",
    "timefrom": 1551294269,
    "timeto": 1551876329
  }
]

let newStates = [];
_.each(states, (state) => {
  if(state.status === "up") {
    var timeFrom = state.timefrom;
    var timeTo = state.timeto;
    newStates.push({up: [timeFrom, timeTo]});
  }
  else{
    var timeFrom = state.timefrom;
    var timeTo = state.timeto;
    newStates.push({down: [timeFrom, timeTo]});
  }
})

console.log(newStates);
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.9.1/underscore-min.js"></script>
© www.soinside.com 2019 - 2024. All rights reserved.