在对象数组上使用 foreach inside map 仅更改最后一条记录
using foreach inside map on array of object only changing the last record
我正在尝试在 .map
中使用 forEach
来根据 [=15] 更改 checkedState
变量中的所有 isChecked
属性 =] 变量。但不知何故它只改变了最后一行。我究竟做错了什么?任何帮助表示赞赏
这是我的代码
const listHari = [
{ nama: "senin", nomor: 1, isChecked: false },
{ nama: "selasa", nomor: 2, isChecked: false },
{ nama: "rabu", nomor: 3, isChecked: false },
{ nama: "kamis", nomor: 4, isChecked: false },
{ nama: "jumat", nomor: 5, isChecked: false },
{ nama: "sabtu", nomor: 6, isChecked: false },
{ nama: "minggu", nomor: 7, isChecked: false },
];
const AddRute = () => {
const [checkedState, setCheckedState] = useState(listHari);
const getRuteById = async () => {
const data = [
{id: "2", nama: "selasa", hari: "2"},
{id: "4", nama: "kamis", hari: "4"},
{id: "5", nama: "jumat", hari: "5"}
];
const tmp1 = checkedState.map((item, index) => {
console.log("index", index);
data.forEach(function (row) {
const rowHari = row.hari - 1;
if (index === rowHari) {
item.isChecked = true;
} else {
item.isChecked = false;
}
console.log("hari", rowHari, item.isChecked);
// console.log('ischecked', item.isChecked);
});
return item;
});
console.log("temp", tmp1); // ==> in tmp1, only the 5th item has isChecked true
}
}
删除其他部分:
else {
item.isChecked = false;
}
这是检查 listHari
中所需元素的另一种方法:
const listHari = [
{ nama: "senin", nomor: 1, isChecked: false },
{ nama: "selasa", nomor: 2, isChecked: false },
{ nama: "rabu", nomor: 3, isChecked: false },
{ nama: "kamis", nomor: 4, isChecked: false },
{ nama: "jumat", nomor: 5, isChecked: false },
{ nama: "sabtu", nomor: 6, isChecked: false },
{ nama: "minggu", nomor: 7, isChecked: false } ],
data = [
{ id: "2", nama: "selasa", hari: "2"},
{ id: "4", nama: "kamis", hari: "4"},
{ id: "5", nama: "jumat", hari: "5"}
];
listHari.forEach(lh=>data.some(d=>lh.isChecked=d.id==lh.nomor));
console.log(listHari);
我正在尝试在 .map
中使用 forEach
来根据 [=15] 更改 checkedState
变量中的所有 isChecked
属性 =] 变量。但不知何故它只改变了最后一行。我究竟做错了什么?任何帮助表示赞赏
这是我的代码
const listHari = [
{ nama: "senin", nomor: 1, isChecked: false },
{ nama: "selasa", nomor: 2, isChecked: false },
{ nama: "rabu", nomor: 3, isChecked: false },
{ nama: "kamis", nomor: 4, isChecked: false },
{ nama: "jumat", nomor: 5, isChecked: false },
{ nama: "sabtu", nomor: 6, isChecked: false },
{ nama: "minggu", nomor: 7, isChecked: false },
];
const AddRute = () => {
const [checkedState, setCheckedState] = useState(listHari);
const getRuteById = async () => {
const data = [
{id: "2", nama: "selasa", hari: "2"},
{id: "4", nama: "kamis", hari: "4"},
{id: "5", nama: "jumat", hari: "5"}
];
const tmp1 = checkedState.map((item, index) => {
console.log("index", index);
data.forEach(function (row) {
const rowHari = row.hari - 1;
if (index === rowHari) {
item.isChecked = true;
} else {
item.isChecked = false;
}
console.log("hari", rowHari, item.isChecked);
// console.log('ischecked', item.isChecked);
});
return item;
});
console.log("temp", tmp1); // ==> in tmp1, only the 5th item has isChecked true
}
}
删除其他部分:
else {
item.isChecked = false;
}
这是检查 listHari
中所需元素的另一种方法:
const listHari = [
{ nama: "senin", nomor: 1, isChecked: false },
{ nama: "selasa", nomor: 2, isChecked: false },
{ nama: "rabu", nomor: 3, isChecked: false },
{ nama: "kamis", nomor: 4, isChecked: false },
{ nama: "jumat", nomor: 5, isChecked: false },
{ nama: "sabtu", nomor: 6, isChecked: false },
{ nama: "minggu", nomor: 7, isChecked: false } ],
data = [
{ id: "2", nama: "selasa", hari: "2"},
{ id: "4", nama: "kamis", hari: "4"},
{ id: "5", nama: "jumat", hari: "5"}
];
listHari.forEach(lh=>data.some(d=>lh.isChecked=d.id==lh.nomor));
console.log(listHari);