我在循环遍历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;
}
});
发布于 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;
发布于 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);
发布于 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
如果您知道当前选项卡数组中的索引,则可以执行类似的操作。
https://stackoverflow.com/questions/55895191
复制相似问题