Javascript 如何根据几条规则筛选数组

Javascript 如何根据几条规则筛选数组,javascript,Javascript,我以以下数据集为例: const labels = [ ['Wed', '11 PM'], ['Thu', '12 AM'], ['Thu', '1 AM'], ['Thu', '2 AM'], ['Thu', '3 AM'], ['Thu', '4 AM'], ['Thu', '5 AM'], ['Thu', '6 AM'], ]; 我试图根据数据数组的大小将其过滤,每N小时保留一次,用空字符串替换其他字符串。然后我试着只保留有时间的一天的第一个实例 期望输出

我以以下数据集为例:

const labels = [
  ['Wed', '11 PM'],
  ['Thu', '12 AM'],
  ['Thu', '1 AM'],
  ['Thu', '2 AM'],
  ['Thu', '3 AM'],
  ['Thu', '4 AM'],
  ['Thu', '5 AM'],
  ['Thu', '6 AM'],
];
我试图根据数据数组的大小将其过滤,每N小时保留一次,用空字符串替换其他字符串。然后我试着只保留有时间的一天的第一个实例

期望输出:

[
  ['Wed', '11 PM'],
  ['', ''],
  ['Thu', '1 AM'],
  ['', ''],
  ['', '3 AM'],
  ['', ''],
  ['', '5 AM'],
  ['', ''],
];

我试图用一个简单的for循环来完成,并检查前一个数组项的日期是否与迭代中当前的一天匹配,但这不起作用,因为它会使一个字符串为空,那么下一个将与空白字符串而不是原来的日期值进行比较。p> 我想我需要跟踪循环之外某处的第一个实例,然后与之进行比较,这样就不会改变原始数组了

const labels = [
  ['Wed', '11 PM'],
  ['Thu', '12 AM'],
  ['Thu', '1 AM'],
  ['Thu', '2 AM'],
  ['Thu', '3 AM'],
  ['Thu', '4 AM'],
  ['Thu', '5 AM'],
  ['Thu', '6 AM'],
];

// Want to keep every nth hour, make others empty strings

// Want to keep only the first instance of a day name  that has a time and change the rest of the day names to be empty strings

// Desired output:
// [
//   ['Wed', '11 PM'],
//   ['', ''],
//   ['Thu', '1 AM'],
//   ['', ''],
//   ['', '3 AM'],
//   ['', ''],
//   ['', '5 AM'],
//   ['', ''],
// ];

function hoursLabelInterval(hours) {
  if (hours <= 6) {
    return 1;
  } else if (hours <= 12) {
    return 2;
  } else if (hours <= 24) {
    return 4;
  } else if (hours <= 36) {
    return 6;
  } else if (hours <= 48) {
    return 8;
  } else if (hours <= 60) {
    return 10;
  } else if (hours <= 72) {
    return 12;
  } else {
    return 24;
  }
}
function formatXLabels(labels, hoursToSkip) {
  let result = labels;
  for (let i=1; i<labels.length; i++) {
    if (i%hoursToSkip !== 0) {
      result[i][1] = '';
    }
  }
  console.log(result);
}

formatXLabels(labels, hoursLabelInterval(labels.length));
const标签=[
[‘星期三’、‘晚上11点’],
[星期四上午十二时],,
[星期四上午一时],,
[星期四上午二时],,
[星期四上午三时],,
[星期四上午四时],,
[星期四上午五时],,
[星期四上午六时],,
];
//想保持每N小时一次,让其他人成为空字符串吗
//希望只保留具有时间的日期名称的第一个实例,并将其余日期名称更改为空字符串吗
//期望输出:
// [
//[‘星期三’、‘晚上11点’],
//   ['', ''],
//[星期四上午一时],,
//   ['', ''],
//['',凌晨3点],
//   ['', ''],
//['',上午5点],
//   ['', ''],
// ];
功能小时标签间隔(小时){

如果(小时可以这样做:

const标签=[
[‘星期三’、‘晚上11点’],
[星期四上午十二时],,
[星期四上午一时],,
[星期四上午二时],,
[星期四上午三时],,
[星期四上午四时],,
[星期四上午五时],,
[星期四上午六时],,
];
让currentDay='';
const newLabels=labels.map((label,i)=>{
如果(i%2==0){
如果(标签[0]!==当前日期){
currentDay=标签[0];
返回[标签[0],标签[1]]
}
返回['',标签[1]]
}
返回['',]
});

console.log(newLabels);
可以执行以下操作:

const标签=[
[‘星期三’、‘晚上11点’],
[星期四上午十二时],,
[星期四上午一时],,
[星期四上午二时],,
[星期四上午三时],,
[星期四上午四时],,
[星期四上午五时],,
[星期四上午六时],,
];
让currentDay='';
const newLabels=labels.map((label,i)=>{
如果(i%2==0){
如果(标签[0]!==当前日期){
currentDay=标签[0];
返回[标签[0],标签[1]]
}
返回['',标签[1]]
}
返回['',]
});

console.log(newLabels);
如果在应答编辑器中单击
,则可以将此代码剪切/粘贴到“堆栈片段”中要使其在页面的此处可运行,任何人都可以快速查看日志results@charlietfl谢谢,我们一定会更频繁地使用它!如果您在answer editor中单击
,您可以将此代码剪切/粘贴到“堆栈片段”中要使其在页面的此处可运行,任何人都可以快速查看日志results@charlietfl谢谢,我们一定会更频繁地使用它!