首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >处理顺序布尔值的数组

处理顺序布尔值的数组
EN

Stack Overflow用户
提问于 2018-12-21 00:10:40
回答 3查看 56关注 0票数 1

很难为这本书设置标题和描述,但当你阅读代码和评论时,希望你会得到它。如果你们有更好的想法,请编辑。

对于这个特定的示例,我如何在javascript中获得每个truefalse之间每天的时间戳和差?

作为数组的一般规则:它总是循环true - false。

我的实际数据有点复杂,但我似乎就是不能正确思考,即使对于这个简单的例子。

可以是reduce,可以是for循环,任何东西。谢谢!

代码语言:javascript
运行
复制
const data = [
    { day: 'today', timestamp: 11, value: true },
    { day: 'today', timestamp: 13, value: false }, //here should be 13-11
    { day: 'today', timestamp: 14, value: true },
    { day: 'today', timestamp: 17, value: false }, //here should be 17-14
    //the sum for today should be 5 (13-11 + 17-14)
    { day: 'tomorrow', timestamp: 9, value: true },
    { day: 'tomorrow', timestamp: 11, value: false }, //here should be 11-9
    { day: 'tomorrow', timestamp: 11, value: true },
    { day: 'tomorrow', timestamp: 16, value: false } //here should be 16-11 
    //the sum for today should be 7 (11-9 + 16-11)
]
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-12-21 00:20:01

一个简单的缩减就可以完成这项工作:只需添加较大的'false‘值,并从和中删除'true’值,就可以得到它;)

代码语言:javascript
运行
复制
const data = [
    { day: 'today', timestamp: 11, value: true },
    { day: 'today', timestamp: 13, value: false }, //here should be 13-11
    { day: 'today', timestamp: 14, value: true },
    { day: 'today', timestamp: 17, value: false }, //here should be 17-14
    //the sum for today should be 5 (13-11 + 17-14)
    { day: 'tomorrow', timestamp: 9, value: true },
    { day: 'tomorrow', timestamp: 11, value: false }, //here should be 11-9
    { day: 'tomorrow', timestamp: 11, value: true },
    { day: 'tomorrow', timestamp: 16, value: false } //here should be 16-11 
    //the sum for today should be 7 (11-9 + 16-11)
];

const result = data.reduce((acc, elt) => {
  if(!acc[elt.day]) acc[elt.day] = 0;
  if(!elt.value) {
    acc[elt.day] += elt.timestamp;
  } else {
    acc[elt.day] -= elt.timestamp;
  }
  return acc;
},{});
console.log(result);

不要忘记在累加器中将每天初始化为0!希望这能有所帮助。

票数 3
EN

Stack Overflow用户

发布于 2018-12-21 00:26:08

您可以使用reduce轻松完成此操作

代码语言:javascript
运行
复制
const data = [
    { day: 'today', timestamp: 11, value: true },
    { day: 'today', timestamp: 13, value: false },
    { day: 'today', timestamp: 14, value: true },
    { day: 'today', timestamp: 17, value: false },
    { day: 'tomorrow', timestamp: 9, value: true },
    { day: 'tomorrow', timestamp: 11, value: false }, 
    { day: 'tomorrow', timestamp: 11, value: true },
    { day: 'tomorrow', timestamp: 16, value: false } 
]

const op = data.reduce((o,c)=>{
  if(o[c['day']]){
    o[c['day']]['timestamp'] += c.value ? -c.timestamp : c.timestamp;
  }  else {
    o[c['day']] = {
      'timestamp' : c.value ? -c.timestamp : c.timestamp
    }
  }
  return o;
},{})

console.log(op)

票数 1
EN

Stack Overflow用户

发布于 2018-12-21 00:28:10

您可以检查结果集中最后插入的对象,并更新时间戳。

代码语言:javascript
运行
复制
const
    data = [{ day: 'today', timestamp: 11, value: true }, { day: 'today', timestamp: 13, value: false }, { day: 'today', timestamp: 14, value: true }, { day: 'today', timestamp: 17, value: false }, { day: 'tomorrow', timestamp: 9, value: true }, { day: 'tomorrow', timestamp: 11, value: false }, { day: 'tomorrow', timestamp: 11, value: true }, { day: 'tomorrow', timestamp: 16, value: false }],
    result = data.reduce((r, { day, timestamp, value }) => {
        var last = r[r.length - 1];
        if (!last || last.day !== day) {
            r.push(last = { day, timestamp: 0 });
        }
        last.timestamp += value ? -timestamp : +timestamp;
        return r;
    }, []);

console.log(result);

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53872263

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档