为什么拼接方法不起作用,并在TypeScript中删除数组上的项



我有一个数组类型Person,它包含一些数据。示例:

const people = [{name: "John", age: "18"},{name: "Mike", content: "20"},{label: "Brand", content: "18"},{label: "Alice", content: "50"},{label: "Zina", content: "10"}];

我有另一个数组类型的字符串[],它包含以下数据:names=["John", "Zina"]

我试着从第一个数组中删除第二个数组上的名称,如下所示:

for (let i = 0; i < people.length; i++) {
for (let j = 0; j < names.length; j++) {
if (names[j] === people[i].name) {
people.splice(i);
}
}
}

为什么它不起作用?

如果您想保留people的对象引用,可以从末尾迭代people,因为要删除项的Array#splice会更改以下项的索引。

var people = [{ name: "Mike", content: "20" }, { label: "Brand", content: "18" }, { label: "Alice", content: "50" }, { label: "Zina", content: "10" }],
names = ["John", "Zina"],
i = people.length;
while (i--) {
if (names.includes(people[i].name) || names.includes(people[i].label)) {
people.splice(i, 1);
}
}
console.log(people);
.as-console-wrapper { max-height: 100% !important; top: 0; }

splice方法正在修改数组。我建议你用filter的方法。

const people = [{name: "John", age: "18"},{name: "Mike", content: "20"},{name: "Brand", content: "18"},{name: "Alice", content: "50"},{name: "Zina", content: "10"}], names=["John", "Zina"];
console.log(people.filter(({name}) => !names.includes(name)));

拼接正在修改原始阵列。即在每次迭代中,如果条件返回true,则该索引处的people数组将被替换为undefined,从而出错

您可以使用slice方法来获取要删除的数据。

for (let i = 0; i < people.length; i++) {
for (let j = 0; j < names.length; j++) {
if (names[j] === people[i].name) {
console.log("matched",names[j],people[i].name, people.slice(i,i+1),);
}
}
}

或者您可以简单地使用filter方法过滤数据。

请参阅以下代码。

const people = [{name: "John", age: "18"},{name: "Mike", content: "20"},{label: "Brand", content: "18"},{label: "Alice", content: "50"},{label: "Zina", content: "10"}];
const names = ["Mike","Shiv"];
for (let i = 0; i < people.length; i++) {
debugger
for (let j = 0; j < names.length; j++) {
if (names[j] === people[i].name) {
people.splice(i,1);
}
}
}
console.log(people)

最新更新