业务场景
第一个下拉框是选择类型,第二个下拉框是所有数据库表,第三个下拉框是当前选择的数据库表中对应的字段(与第二个下拉框联动),三个下拉框是一组,可以点添加按钮添加一组下拉框。
业务需求
如果是2组或者2组以上,需要判断每一组中是否存在同一张表下的相同字段,如果存在择返回false,否则返回true
数据模拟
type代表选择类型(tableData代表按表字段配置),value[0]代表数据库表ID,value[1]代表字段ID
const arr = [
{ type: 'tableData', value: ['11111', '22222'] },
{ type: 'tableData', value: ['11111', '22222'] },
{ type: 'tableData', value: ['11111', '22222'] },
{ type: 'tableData', value: ['11121', '22322'] },
{ type: 'dimensionData', value: ['11111', '22222'] },
]
解决思路
①使用filter过滤出tableData数据;②将value数组连接成字符串,生成一个字符串数组tableColumnIds;③对数组tableColumnIds进行去重生成新的数组uniqTableColumnIds;④若uniqTableColumnIds的长度小于tableColumnIds的长度,返回false,否则返回true
代码实现
const verifySameIds = (arr) => {
const filterTableColumn = arr.filter(({ type }) => type === 'tableData');
const tableColumnIds = filterTableColumn.map(({ value }) => value.join(''));
const uniqTableColumnIds = [...new Set(tableColumnIds)];
if (uniqTableColumnIds.length < tableColumnIds.length) return false;
return true
}
verifySameIds(arr)
应用拓展
该思路方法同样适用于value数组中有多个值的情况(值只能是字符串或者数值)。