我有这个React方法,当用户从下拉列表中选择某个东西时,它会处理
handleAreeTematicheChange(values) {
if (Object.keys(values).length >= 0) {
let newValue = [];
const newAreeTematiche = values;
if (Object.keys(values).length > 1) {
newValue.push({ value: '-1', label: `${Object.keys(values).length} aree tematiche selezionate` });
} else {
newValue = values;
}
const newList = [];
for (const filter in newAreeTematiche) {
newList.push(newAreeTematiche[filter].value);
}
const filterAreeTematiche = values.filter(item => item.value !== '-1' && newList.indexOf(item) === -1);
const newListString = newList.join('|');
this.setState({ filterAreeTematiche, selectedAreeTematiche: newListString });
this.onReloadAllElements(newListString);
} else {
this.setState({ filterAreeTematiche: [], selectedAreeTematiche: undefined });
this.onReloadAllElements(null);
}
}
触发错误
const filterAreeTematiche = values.filter(item => item.value !== '-1' && newList.indexOf(item) === -1);
我确信问题是values
在那个时刻是一个对象,所以.filter()
不起作用,因为它只对数组起作用。
它还给了我.length
的错误,我用Object.keys
解决了它,正如你所看到的。如何过滤对象?我必须把它转换成数组吗?
如前所述,Object.filter无效,因此请将对象转换为键数组,并在函数中使用这些键来获得如下值。只需将">filterAreeTematice";值。
const filterAreeTematiche = Object.keys(values)
.filter(k => (values[k] !== '-1' && newList.indexOf(values[k]) === -1))
.map(key => ({ value: values[key] }));
这将返回一个带有单个键"的对象数组;值";。由于我不知道你在这个州到底想要什么,我只是举了一个例子;值";键,您可以在map函数中根据需要更改对象。