gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 11:01:40 25 4
gpt4 key购买 nike

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

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 我如何才能在数组中找到下一个对象 ID 并将私有(private)属性设置为 false?

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

这里是一个链接 repl.it我尝试在新过滤的 publicPorjects 数组上使用 Array.prototype.find() 函数,但是 find 方法总是返回数组中的第一个对象

基本上这就是我要实现的目标...

如果 currentProjectId 为 1,nextProjectId 预计为 2..如果 currentProjectId 设置为 2,则 nextProjectId 应为 5,因为私有(private)属性在 3 和 4 上设置为 true... 最后,如果 currentProjectId 设置为 5,则 nextProjectId 应为 1

最佳答案

你可以拿一个Generator并只获取​​带有 private: false 的项目。

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 }];

projects[Symbol.iterator] = function* () {
var i = 0;
if (this.every(({ private }) => private)) return; // prevent running forever
while (true) {
if (!this[i].private) yield this[i];
i++;
i %= this.length;
}
}

var nextFalse = projects[Symbol.iterator]();

console.log(nextFalse.next().value);
console.log(nextFalse.next().value);
console.log(nextFalse.next().value);
console.log(nextFalse.next().value);
.as-console-wrapper { max-height: 100% !important; top: 0; }

关于javascript - 如何在对象数组中找到下一个将某个属性设置为 false 的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57490459/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com