Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何检查数组中object.Value的顺序是否相同_Javascript_Arrays_Reactjs_Sorting - Fatal编程技术网

Javascript 如何检查数组中object.Value的顺序是否相同

Javascript 如何检查数组中object.Value的顺序是否相同,javascript,arrays,reactjs,sorting,Javascript,Arrays,Reactjs,Sorting,在我的react应用程序中有一个例子,我必须检查数组中对象的值在顺序上是否相同,它们的其他属性是否按顺序增加1,然后如果满足条件,则将其推到新数组。顺序中的值数量由输入提供 例如,用户希望将4个对象推送到一个新数组中,该数组具有其“状态”:true objects = [ { "someID": 0, "status": false, }, { "someID": 1, "status": false, }, {

在我的react应用程序中有一个例子,我必须检查数组中对象的值在顺序上是否相同,它们的其他属性是否按顺序增加1,然后如果满足条件,则将其推到新数组。顺序中的值数量由输入提供

例如,用户希望将4个对象推送到一个新数组中,该数组具有其
“状态”:true

objects =  [
{
"someID": 0,
"status": false,
},
{
"someID": 1,
"status": false,
},
{
"someID": 2,
"status": true,
},
{
"someID": 3,
"status": true,
},
{
"someID": 4,
"status": true,
},
{
"someID": 6,
"status": true,
},
{
"someID": 7,
"status": false,
},
{
"someID": 8,
"status": false,
},
{
"someID": 9,
"status": true,
},
{
"someID": 10,
"status": true,
},
{
"someID": 11,
"status": true,
},
{
"someID": 12,
"status": true,
},

]
从我的示例中,someID为2、3、4、6的对象满足条件,具有
状态:true
,但它们的
someID
值不会按顺序增加1。另一方面,具有
someID
9、10、11的对象,12将其
状态
值设置为true,其
someID
值依次增加1。所以结果应该是

newArray = [
{
"someID": 9,
"status": true,
},
{
"someID": 10,
"status": true,
},
{
"someID": 11,
"status": true,
},
{
"someID": 12,
"status": true,
},
]

您可以检查
状态
和前置或后继

const
objects=[{someID:0,status:true},{someID:1,status:false},{someID:2,status:true},{someID:3,status:true},{someID:4,status:true},{someID:5,status:false},{someID:6,status:false},{someID:7,status:true}],
result=objects.filter({someID,status},i,a)=>status&&(
a[i-1]?.status&&a[i-1]?.someID===someID-1||
a[i+1]?.status&&someID+1==a[i+1]?.someID
));
控制台日志(结果)

.as控制台包装{max height:100%!important;top:0;}
下面是一个通用函数,该函数接受数组并遍历for循环。传递属性和预期匹配值,就像预期的顺序中的精确计数一样:

const getSequence = (arr, count, key = 'status', value = true, id = 'someID') => {
  let match = []
  const isIDIncremental = (obj) => {
    if(match.length === 0) return true
    return obj[id] - 1 === match[match.length - 1][id]
  }

  for(const obj of arr) {
    if(match.length === count) break
    if(obj[key] === value && isIDIncremental(obj)) {
      match.push(obj)
    } else {
      match = []
    }
  }
  
  return match.length === count ? match : []
}

这里的输出应该是什么?一个包含满足需求的对象的数组,例如我提供的示例,它将是newArray=[{“someID”:2,“status”:true,},{“someID”:3,“status”:true,},{“someID”:4,“status”:true,},]对于类似连续两次的情况,预期的结果是什么?你有[2,3]和[3,4]来满足条件,结果会怎样?当您有多个匹配项时,是否只希望第一个序列作为返回?它仅仅是基于一个特定的对象属性,还是应该匹配属性和所有其他道具(除了someID)应该匹配?首先遇到多个匹配就足够了,事实上我问错了,现在我看到了,情况是,推送到新数组的对象需要具有相同的status属性,并且它们的
someID
属性值必须按顺序增加,即我们需要4个(仍然值来自用户,可以是4个,但可以是3个或1个或5个)对象,它们的
“status”:true
和它们的
“someID”
顺序相同[0,1,2,3]或[3,4,5,6],但即使它们的状态在序列@buzatto中为真,也不能是[3,4,6,7],如果我没有弄错的话,这只在我需要3次
true
的情况下有效,但当我希望4或5个对象在序列中为
时有效吗:true
按顺序输入是从
输入提供的。我还没有经验。您能告诉我
在这种情况下
a[I-1]做什么吗?状态
?您只需要按顺序输入两项。仅供参考: