我知道标题不够清楚,但是我会在这里尝试解释更多。 我有一个清单,必须选择多个Items并创建一个字符串值,其中包含必须发送到服务器的ID和价格。 这是我的方法:(工作正常)
selectItem = data => {
let test = 130;
if (data.Unites < test) {
data.Etat = 0
console.warn('points insufisants');
} else {
data.isSelect = !data.isSelect;
data.selectedClass = data.isSelect ? StylesGift.validChek : StylesGift.inValidChek;
const newItem = {
idCadeau: data.idCadeau,
Unites: data.Unites,
};
if (data.isSelect) {
const index = this.state.paramsSend.indexOf([newItem]);
this.setState({
paramsSend: this.state.paramsSend.concat([newItem]),
}, () => {
let str = this.state.paramsSend.map(v => Object.values(v).join('_')).join(',')
this.setState({
params: str,
});
});
}else if (data.isSelect === false) {
const index = this.state.paramsSend.indexOf([newItem]);
if (index > -1) {
array.splice(index, 1);
let str = this.state.paramsSend.map(v => Object.values(v).join('_')).join(',')
this.setState({
params: str,
});
}
console.log('looog' + this.state.paramsSend);
}
}
this.setState({changed: !this.state.changer})
};
我的问题是,当我取消选择商品时,无法使用以下代码删除该商品的ID和价格:
else if (data.isSelect === false) {
const index = this.state.paramsSend.indexOf([newItem]); <-- =-1
if (index > -1) {
this.state.paramsSend.splice(index, 1);
let str=this.state.paramsSend.map(v=>Object.values(v).join('_')).join(',')
this.setState({
params: str,
});
}
console.log('looog' + this.state.paramsSend);
}
有什么建议吗? indexOf返回-1 我不知道为什么
const index = this.state.paramsSend.indexOf([newItem]);
console.warn('index ' + index);
console.warn('from this ' +JSON.stringify(this.state.paramsSend));
console.warn('remove this ' + JSON.stringify(newItem));
答案 0 :(得分:1)
您有2个问题:
(function () {
var active = "";
$('button').on('click', function (e) {
var id = "#" + e.target.value;
$(active).html("");
active = id;
$(id).html("button was clicked");
});
})();
,而要使用您要查找的元素:<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<!-- this button has default style -->
<button value="action">Action</button>
<label id="action"></label>
<button value="action1">Action</button>
<label id="action1"></label>
indexOf
参数是数组中的实际对象而不是副本时,在对象数组上调用的const index = this.state.paramsSend.indexOf(newItem);
才有效。即,这将无法工作:indexOf(item)
即使数组中存在相同的对象所以这应该解决两个问题:
item
答案 1 :(得分:0)
您的代码不是很清楚,但是请尝试使用过滤器功能。
它将符合条件的所有元素压入数组
const newDataArray = data.filter(elem => elem.idCadeau !== newItem.idCadeau)
所以在这里,您有一个新数组,其中所有元素都与您的newItem不同