【问题标题】:remove less sequence count numbers from javascript object从 javascript 对象中删除较少的序列计数
【发布时间】:2019-03-11 18:16:32
【问题描述】:

我有一个数组对象,对象中的每个值都是多个数字序列的数组。

我想删除那些计数小于 10 的序列。

在给定的输入中,第 0 个值有 3 个序列,2 到 4 不超过 10 个序列号,所以我们需要删除它,剩下的 2 个序列数超过 10。

我在下面的输入中添加了空格仅供参考,以便您可以看到该数组中有一个序列中断,找到该序列的计数,如果计数小于 10,则删除该序列。

输入:

{ '0': [ 2, 3, 4,    7, 8, 9, 10,11, 12, 13, 14, 15, 16, 17, 18, 19, 20,     22, 23, 24, 25,26,27,28,29,30,31,32 ],
   '3': [ 0, 1,2,3,4,5,6,7,8,9,10,11,12,13,    15,16,17,18,22,23,24 ] }

输出:

{
'0': [7, 8, 9, 10, 11,12, 13, 14, 15, 16, 17, 18, 19, 20,     22, 23, 24, 25,26,27,28,29,30,31,32],
'3': [ 0,1,2,3,4,5,6,7,8,9,10,11,12,13]

我无法完成逻辑

for (var key in emptyMap) {
    let count = [];
    let initialVal = emptyMap(key)[0];
    removeEmptyMap[key] = [];
    for (let i = 1; i < emptyMap(key).length; i++) {

        if ((emptyMap(key)[i] === initialVal + 1)) {

            count[key].push(emptyMap(key)[i])
        } else if (count.pop() < 10) {
            initialVal = emptyMap(key)[i];
        } else {
            initialVal = emptyMap(key)[i];
        }
    }
    console.log()

}

【问题讨论】:

  • which are having less sequence from the array 是什么意思?
  • 数组中的空格从不代表序列中断
  • 如何定义“序列”?我在这里只看到 2 个数组。如上所述,这个问题不清楚。
  • 如果我理解正确,您只是想更改第 0 个数组?当你说 2 到 4 不超过 10 时,你的意思是 2+3+4&lt;10 ?
  • 啊,我明白了,所以您在第一个中将序列定义为连续整数?第二个是怎么回事?看起来您在 1213 之间添加了一个换行符,而根据您的第一个定义,它应该是一个单独的序列。

标签: javascript arrays object data-structures ecmascript-6


【解决方案1】:

首先,您需要创建一个包含每个序列的数组数组。然后返回值大于10arrays的组合。将此方法应用于您的obj 中的每个key

let obj = { '0': [ 2, 3, 4,    7, 8, 9, 10,11, 12, 13, 14, 15, 16, 17, 18, 19, 20,     22, 23, 24, 25,26,27,28,29,30,31,32 ],
   '3':
   [ 0, 1,2,3,4,5,6,7,8,9,10,11,12,13,   15,16,17,18,22,23,24 ] }

function getSeq(arr,len){
  let seq = [[]];
  for(let i = 0;i<arr.length;i++){
    seq[seq.length -  1].push(arr[i]);
    if(arr[i] !== arr[i+1] - 1){
      seq.push([])
    } 
  }
  return seq.reduce((ac,a) => a.length < len ? ac: [...ac,...a],[])
}

for(let key in obj){
  obj[key] = getSeq(obj[key],10)
}
console.log(obj)

【讨论】:

  • 我会推荐return seq.filter(a =&gt; a.length &gt;= 10).flat()
  • @Bergi flat 还不是标准。 Edge 不支持。
  • @Bergi flat() 在 nodejs 中给出错误,是另一个函数吗?
  • DPac 是对的,您需要一个适用于旧平台的 polyfill - 请参阅 developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
【解决方案2】:

如果我理解正确,你想要这个。这是splice 的完美任务。

var obj = 
{ '0': [ 2, 3, 4,7, 8, 9, 10,11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25,26,27,28,29,30,31,32 ],
'3': [ 0, 1,2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,   15, 16, 17, 18, 22, 23, 24 ] }

console.log('input', obj)

var sum = 0
for (let i=0; i<obj['0'].length; i++){
  sum += obj['0'][i]
  if (sum > 10) {
    obj['0'].splice(0, i)
    break
  }
}

console.log('output', obj)

【讨论】:

  • 我对我的英语感到困惑,我不想要数字的总和,我想要序列破坏索引及其索引。
  • 一旦我得到了序列中断索引,然后我想要每个数组中每个序列的计数,如果序列超过 10,那么我想要那个序列
  • “序列中断索引”是什么意思?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-03-17
  • 2016-05-19
  • 1970-01-01
  • 2012-02-29
  • 2020-12-07
  • 1970-01-01
  • 2016-11-08
相关资源
最近更新 更多