js 一个对象根据条件切割成对象数组

下述代码实现了将一个对象{“hour1Price”:1,hour1str:“0”,hour2Price:2,hour2str:‘0’,…}变为[{hour1price:1,hour1str:0},{hour2price:1,hour2str:0}…]这样的数组

var dayToHourPrice = {
  hour2Price: 2,
  hour3str: "0",
  hour1Price: 1,
  hour5str: "0",
  hour4Price: 4,
  hour4str: "0",
  hour1str: '0',
  hour2str: '0',
  hour3Price: 4,
  hour4str: 4,
  hour5Price: 4,
  hour11str: 4,
  hour11Price: 4,
  ......
};

var priceArray = Object.entries(dayToHourPrice);

priceArray.sort(function(a, b) {
  var aNumber = parseInt(a[0].match(/\d+/)[0]);
  var bNumber = parseInt(b[0].match(/\d+/)[0]);
  return aNumber - bNumber;
});

var hourPriceArray = [];

for (var i = 0; i < priceArray.length; i += 2) {
  var hourObject = {
    [priceArray[i][0]]:priceArray[i][1],
    [priceArray[i+1][0]]: priceArray[i+1][1]
  };
  hourPriceArray.push(hourObject);
}

console.log(priceArray,hourPriceArray);

*上述代码使用的match介绍

match()方法是JavaScript中字符串对象的方法之一,它可以用来在一个字符串中查找匹配的子串,并返回一个包含匹配结果的数组。match()方法可以接收一个参数,这个参数可以是正则表达式对象或者一个字符串

  • 语法:
string.match(regexp)
  • 参数:
    • regexp: 必需。规定要匹配的模式的 RegExp 对象。如果该参数不是 RegExp 对象,则需要首先把它传递给 RegExp 构造函数,将其转换为 RegExp 对象。。
  • 返回值:
    • 存放匹配结果的数组。该数组的内容依赖于 regexp 是否具有全局标志 g。 如果没找到匹配结果返回 null 。
  • 具体使用示例:
lvar str="The rain in SPAIN stays mainly in the plain"; 
var n=str.match(/ain/gi);
console.log(n); // ['ain', 'AIN', 'ain', 'ain']
var str="The rain in SPAIN stays mainly in the plain"; 
var n=str.match(/ain/g);
console.log(n); // ['ain', 'ain', 'ain']
var str="The rain in SPAIN stays mainly in the plain"; 
var n=str.match(/ain/);
console.log(n[0]); // ain
  • 注意

match() 方法将检索字符串 String Object,以找到一个或多个与 regexp 匹配的文本。
这个方法的行为在很大程度上有赖于 regexp 是否具有标志 g。如果 regexp 没有标志 g,那么 match() 方法就只能在 stringObject 中执行一次匹配。如果没有找到任何匹配的文本, match() 将返回 null。否则,它将返回一个数组,其中存放了与它找到的匹配文本有关的信息

你可能感兴趣的:(javascript)