首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >循环通过filter函数内部的第二个数组

循环通过filter函数内部的第二个数组
EN

Stack Overflow用户
提问于 2019-04-29 06:49:13
回答 3查看 84关注 0票数 -2

我在循环遍历filter数组函数内部的数组tabData时遇到了问题。有什么建议吗?

这是我当前的代码行

const filteredData = allData.filter(({ existingLabel }) => existingLabel === tabData[/* Im having trouble iterating through this array  */].label);

数组allData结构

0: {existingLabel: "exams", x: "xyz", a:12345, ...many fields}
1: {existingLabel: "notes", x: "ska", a:67333, ...many fields}
2: {existingLabel: "quiz",  x: "sf3", a:34355, ...many fields}
3: {existingLabel: "notes", x: "xhi", a:34253, ...many fields}
4: {existingLabel: "exams", x: "ojk", a:98527, ...many fields}
5: {existingLabel: "quiz",  x: "qid", a:65287, ...many fields}

数组tabData结构

0:{tab:1 , label:'notes'} 
1:{tab:2 , label:'exams'}
2:{tab:3 , label:'quiz'}

我尝试执行以下操作,但得到此错误:“期望的是赋值或函数调用,但看到的是表达式”

 const filteredData = allData.filter(({ existingLabel }) => {
    for (let i = 0; i < tabData.length(); i++) {
        existingLabel === tabData[i].label;
    }
});
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-04-30 03:21:01

感谢大家的帮助:)这就是我解决问题的方法

const filteredData = allData.filter(({ existingLabel }) => {
            let returnedData = [];
            for (let i = 1; i < tabData.length; i++) {
                if (tab === i) {
                    returnedData = existingLabel === tabData[i].label;
                }
            }
            return returnedData;
});

const finalData = tab === 0 ? allData : filteredData;
票数 0
EN

Stack Overflow用户

发布于 2019-04-29 07:58:23

您可以使用下面的代码来解决您的问题。当此代码在allData中循环时,它会检查当前元素的制表符是否等于指定的制表符。如果是,它就会保留它。如果不是,它会删除它。

let allData = [{existingLabel: "exams", x: "xyz", a:12345}, {existingLabel: "notes", x: "ska", a:67333}, {existingLabel: "quiz", x: "sf3", a:34355}, {existingLabel: "notes", x: "xhi", a:34253}, {existingLabel: "exams", x: "ojk", a:98527}, {existingLabel: "quiz",  x: "qid", a:65287}];
let tabData = [{tab:1 , label:'notes'}, {tab:2 , label:'exams'}, {tab:3 , label:'quiz'}];
let tab = 2;

const filteredData = allData.filter(({ existingLabel }) => tabData.filter(e => e.label == existingLabel)[0].tab == tab);

console.log(filteredData);

票数 0
EN

Stack Overflow用户

发布于 2019-04-29 08:08:13

根据目前提供的信息,这是不可能的。但有了一条额外的信息,这就很简单了。如果您已经知道要查找的选项卡的标签,则可以执行以下操作:

const filterToLabel = (allData) => (tabLabel) => 
  allData.filter(({existingLabel}) => existingLabel === tabLabel)

const allData = [{existingLabel: "exams", x: "xyz", a:12345}, {existingLabel: "notes", x: "ska", a:67333}, {existingLabel: "quiz",  x: "sf3", a:34355}, {existingLabel: "notes", x: "xhi", a:34253}, {existingLabel: "exams", x: "ojk", a:98527}, {existingLabel: "quiz",  x: "qid", a:65287}]
const tabData = [{tab:1 , label:'notes'}, {tab:2 , label:'exams'}, {tab:3 , label:'quiz'}]

console.log(filterToLabel(allData)('notes')) //=> ska/67333, xhi/34253

如果你不知道标签,但知道标签号,这几乎是一样简单的:

const filterToTabId = (allData, tabData) => (tabId) => {
  const tab = tabData.find(({tab}) => tab == tabId)
  // if (!tab) // throw error or return empty array
  return allData.filter(({existingLabel}) => existingLabel === tab.label)
}

const allData = [{existingLabel: "exams", x: "xyz", a:12345}, {existingLabel: "notes", x: "ska", a:67333}, {existingLabel: "quiz",  x: "sf3", a:34355}, {existingLabel: "notes", x: "xhi", a:34253}, {existingLabel: "exams", x: "ojk", a:98527}, {existingLabel: "quiz",  x: "qid", a:65287}]
const tabData = [{tab:1 , label:'notes'}, {tab:2 , label:'exams'}, {tab:3 , label:'quiz'}]

console.log(filterToTabId(allData, tabData)(2)) //=> xyz/1234, ojk/98527

如果您知道当前选项卡数组中的索引,则可以执行类似的操作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55895191

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档