Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.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 如何在某个属性设置为false的对象数组中找到下一个对象?_Javascript_Arrays_Javascript Objects - Fatal编程技术网

Javascript 如何在某个属性设置为false的对象数组中找到下一个对象?

Javascript 如何在某个属性设置为false的对象数组中找到下一个对象?,javascript,arrays,javascript-objects,Javascript,Arrays,Javascript Objects,我有一个对象(项目)数组,如下所示: const projects= [ { id: 1, name: 'project1', private: false }, { id: 2, name: 'project2', private: false }, { id: 3, name: 'project3', private: true }, { id: 4, name: 'proje

我有一个对象(项目)数组,如下所示:

const projects= [
  {
    id: 1,
    name: 'project1',
    private: false
  },
  {
    id: 2,
    name: 'project2',
    private: false
  },
  {
    id: 3,
    name: 'project3',
    private: true
  },
  {
    id: 4,
    name: 'project4',
    private: true
  },
  {
    id: 5,
    name: 'project5',
    private: false
  }
]
如果我像这样设置当前项目id
currentProjectId=projects[0]。id
如何在数组中找到私有属性设置为false的下一个对象id

我不太确定如何执行此操作,我尝试使用
Array.prototype.flitter()
函数创建一个新的数组publicProjects,其中所有对象的私有属性都设置为false,但不清楚如何从新数组中获取下一个对象并将其分配给名为nextProjectId的新变量。。。老实说,我不太确定创建一个新的过滤数组是否是正确的方法,所以任何建议都是非常感谢的

这里有一个链接,指向我尝试在新筛选的PublicPorObjects数组上使用
Array.prototype.find()
函数,但是find方法始终返回数组中的第一个对象

基本上这就是我想要实现的

如果currentProjectId为1,则下一个ProjectId应为2。。 如果currentProjectId设置为2,则nextProjectId预计为5,因为私有属性在3和4上设置为true。。。最后,如果currentProjectId设置为5,则nextProjectId应为1

您可以使用
数组#reduce
并保留小于当前项目id的最小id(对于
currentProjectId=2
,该值应为
1
),以及大于当前项目id的最小id(对于
currentProjectId=2
,该值应为
5
)。如果第二个值存在,则获取它,否则获取第一个值。即使列表顺序不正确,这也会起作用。它只在数组中遍历一次

//只使用JSON.parse来节省空间,无需向下滚动
const projects=JSON.parse(`[{“id”:1,“name”:“project1”,“private”:false},{“id”:2,“name”:“project2”,“private”:false},{“id”:3,“name”:“project3”,“private”:true},{“id”:4,“name”:“project4”,“private”:true},{“id”:5,“name”:“project5”,“private”:false}`);
函数getNextId(currentProjectId){
var result=projects.reduce(函数(minList,item){
if(item.private | | currentProjectId==item.id)返回minList;
var index=currentProjectIdconsole.log(getNextId(5));//1
一种方法是
过滤数组,
查找元素并返回下一个元素:

const项目=[
{id:1,名称:“project1”,private:false},
{id:2,名称:“project2”,private:false},
{id:3,名称:“project3”,private:true},
{id:4,名称:“project4”,private:true},
{id:5,名称:“project5”,private:false}
];
const getNextProject=(id,pr)=>{
常量f=pr.filter(o=>!o.private)
返回f[f.findIndex(o=>id==o.id)+1]| | f[0]
}
log(getNextProject(1,projects))//返回{id:2…}
log(getNextProject(2,projects))//返回{id:5…}

console.log(getNextProject(5,projects))//返回{id:1…}
这可以通过在原始数组上使用
Array.slice
仅在当前索引之后搜索来完成

例如:

const项目=[
{
id:1,
名称:“项目1”,
二等兵:错,
},
{
id:2,
名称:“项目2”,
二等兵:错,
},
{
id:3,
名称:“项目3”,
二等兵:是的,
},
{
id:4,
名称:“项目4”,
二等兵:是的,
},
{
id:5,
名称:“项目5”,
二等兵:错,
},
]
const findNextPrivateProject=(currentprojectd,projects)=>{
const currentProjectIndex=projects.findIndex(
project=>project.id==currentProjectId
)
返回项目
.slice(currentProjectIndex+1)
.find(project=>!project.private)
}
设currentprojectd=1
document.getElementById('next-private-project')。addEventListener('click',()=>{
const nextPrivateProject=findNextPrivateProject(currentprojectd,projects)
console.log(nextPrivateProject)
currentProjectId=nextPrivateProject.id
如果(currentProjectId>=projects[projects.length-1].id)
CurrentProjectd=1
})
Find Next Private Project
您可以选择一个,只获取带有
Private:false
的项目

constprojects=[{id:1,名称:'project1',private:false},{id:2,名称:'project2',private:false},{id:3,名称:'project3',private:true},{id:4,名称:'project4',private:true},{id:5,名称:'project5',private:false}];
项目[Symbol.iterator]=函数*(){
var i=0;
如果(this.every({private}=>private))返回;//防止永远运行
while(true){
如果(!this[i].private)产生这个[i];
i++;
i%=此长度;
}
}
var nextFalse=projects[Symbol.iterator]();
log(nextFalse.next().value);
log(nextFalse.next().value);
log(nextFalse.next().value);
console.log(nextFalse.next().value);

.as console wrapper{max height:100%!important;top:0;}
可以说,最惯用的方法是使用一两次:

const项目=[
{
id:1,
名称:“项目1”,
二等兵:错
},
{
id:2,
名称:“项目2”,
二等兵:错
},
{
id:3,
名称:“项目3”,
二等兵:对
},
{
id:4,
名称:“项目4”,
二等兵:对
},
{
id:5,
名称:“项目5”,
二等兵:错
}
];
const condition=obj=>!obj.private;
函数getNextProject(项目,id){
返回projects.find(obj=>obj.id>id&&condition(obj))|| projects.find(c
function setNextProjectId() {
  // find index of current Project Id
  var currentProject = publicProjects.find(x => x.id === currentProjectId );

  if(currentProject){
    var index = publicProjects.indexOf(currentProject, 0);
    nextProjectId =  publicProjects[index + 1].id;
    return;
  } else
  {
    nextProjectId = publicProjects[0];
  }

}
function setNextProjectId() {
  // find index of current Project Id
  var index = publicProjects.findIndex(x => x.id === currentProjectId );

nextProjectId = index >= 0 ? publicProjects[index + 1].id : publicProjects[0].id;
}