我有两个阵列。我正在用PubSidebar过滤基于groupKey。
let groupKey = ['oaDeal', 'Journals', 'Deposit']
// This array of object will be filtering with groupKey
const PubSidebar = [
{
value: 'Dashboard',
role: 'public',
},
{
value: 'oaDeal',
role: 'private',
content: [
{
role: 'private',
value: 'oaDeal',
},
],
},
{
value: 'Journals',
role: 'public',
content: [
{
role: 'private',
value: 'Journals',
},
{
role: 'private',
value: 'Token',
},
{
role: 'private',
value: 'policy',
},
{
role: 'private',
value: 'Deposit',
},
{ role: 'public', value: 'test' },
],
},
]
// Here is my trying code. I am filtering PubSidebar
const res = PubSidebar.filter(x => {
// when it's main outerloop role public or private and groupKey matched
if (
x.role === 'public' ||
(x.role === 'private' && groupKey.includes(x.value))
) {
// then if inner-array exist then inner array filtering
if (x.content) {
// inside content assign condition public or private and groupKey
let tempX = x.content.filter(
y =>
y.role === 'public' ||
(y.role === 'private' && groupKey.includes(y.value)) ||
x.value === y.value
)
x.content = tempX
console.log(tempX)
return x
} else {
// Other wise give me a single object public
console.log(x)
return x
}
}
})
如果父母重视:日记或存款或任何价值或角色:公共,我在传递内容数组内的对象时遇到问题。我必须在基于的内容数组中传递值groupKey
。
如果存在Journals and Deposits,则在内容数组内添加Journals and Deposit数据,包括公共数据。(三个对象)
如果存在Journals,则将Contents数组内的Journals数据添加到公共数据(两个对象)中如果存在Deposits,则将Contents数组内包含公共数据的Deposits数据添加到两个公共对象中
如果GroupKey日记与pubsidebar中的content对象匹配,则有两个对象,我们将得到
{
value: 'Journals',
role: 'public',
content: [
{
role: 'private',
value: 'Journals',
},
{ role: 'public', value: 'test' },
],
}
如果GroupKey存款与pubsidebar中的内容对象匹配,则两个对象
{
value: 'Deposit',
role: 'public',
content: [
{
role: 'private',
value: 'Deposit',
},
{ role: 'public', value: 'test' },
],
}
如果GroupKey Journals和Deposits与pubsidebar中的content对象匹配,则三个对象,
{
value: 'Deposit' || "Journals",
role: 'public',
content: [
{
role: 'private',
value: 'Journals',
},
{
role: 'private',
value: 'Deposit',
},
{ role: 'public', value: 'test' },
],
}
如果我理解正确,则想过滤PubSidebar。如果值具有公共作用或groupKey中包含的值,则保留这些值。如果是这样,这将是您的功能:
PubSidebar.filter(x => (x.role === 'public' || groupKey.includes(x.value));
如果您也想在内容上运行它,我们可以将其拆开:
const filterByGroup = (x) => (x.role === 'public' || groupKey.includes(x.value));
let result = [];
for (let i = 0; i < PubSidebar.length; i++) {
const item = PubSidebar[i];
if (filterByGroup(item)) {
if (item.content) {
item.content = item.content.filter(filterByGroup);
}
result = [ ...result, item ];
}
}
片段:
let groupKey = ['oaDeal', 'Journals', 'Deposit']
const PubSidebar = [{
value: 'Dashboard',
role: 'public',
},
{
value: 'oaDeal',
role: 'private',
content: [{
role: 'private',
value: 'oaDeal',
}, ],
},
{
value: 'Journals',
role: 'public',
content: [{
role: 'private',
value: 'Journals',
},
{
role: 'private',
value: 'Token',
},
{
role: 'private',
value: 'policy',
},
{
role: 'private',
value: 'Deposit',
},
{
role: 'public',
value: 'test'
},
],
},
]
const filterByGroup = (x) => (x.role === 'public' || groupKey.includes(x.value));
let result = [];
for (let i = 0; i < PubSidebar.length; i++) {
const item = PubSidebar[i];
if (filterByGroup(item)) {
if (item.content) {
item.content = item.content.filter(filterByGroup);
}
result = [...result, item];
}
}
console.log(result);
问题内容: 我有一系列对象,我想知道搜索它的最佳方法。给定以下示例,我如何搜索和?jQuery有什么可以帮助的吗?还是我必须自己蛮力搜索? 问题答案: 您可以使用:
我有这个对象,我需要过滤它。 我只需要在“数据”中输入“isEnabled”为真的值的ID
问题内容: 我有以下JavaScript数组的房地产主页对象: 我想做的是能够对对象执行过滤,以返回“家庭”对象的子集。 例如,我想根据能够过滤:,,,和。 如何在JavaScript中执行类似下面的伪代码的操作: 注意,语法不必与上面完全相同。这只是一个例子。 问题答案: 您可以使用以下方法: 现场示例: 此方法是新ECMAScript 5th Edition标准的一部分,几乎可以在所有现代浏览
问题内容: 我有两个对象数组。我想基于PermissionObj过滤数据。 这是即将形成的数据库。这是permissionObj中的子数组的数组。 这是静态数据。我想比较基于PermissionObj的数据。 我正在尝试基于 对象 的 PermissionObj数组 过滤 对象 的 数据数组 。这是我尝试的代码。 如果PermissionObj值将与data值匹配。然后显示数据。 我接受的输出将是
根据条件过滤一个对象数组,同时过滤掉未指定的键(key)。 使用 Array.filter() 根据断言 fn 过滤数组,以便返回条件为真值(truthy)的对象。 在过滤出来的数组上,使用 Array.map() 和 Array.reduce() 返回新的对象来过滤掉 keys 参数中未提供的键。 const reducedFilter = (data, keys, fn) => data.
问题内容: 我在javascript中有一组对象。内容看起来像这样; 我想保留一些对象并删除其余的对象。如果object属性为2或34,则将保留对象。其他对象被删除。遗嘱的结果看起来像这样; 我正在使用node.js v6.91。 编辑:有人建议我使用过滤器来解决这种问题。欢迎使用过滤器技术的答案。 问题答案: 您可以尝试以下方法1和2: 方法1 :(使用) 注意:这将返回一个新数组,并且不会修改