Javascript 如何在具有对象的数组中查找匹配项并更改属性?
当名称在对象属性“name”中匹配时,我想在第一次匹配时将此属性更改为“TV(1)”,并在下一次匹配时增加一个计数器,但这对我不起作用(请运行代码查看问题),我如何更改具有对象的数组Javascript 如何在具有对象的数组中查找匹配项并更改属性?,javascript,Javascript,当名称在对象属性“name”中匹配时,我想在第一次匹配时将此属性更改为“TV(1)”,并在下一次匹配时增加一个计数器,但这对我不起作用(请运行代码查看问题),我如何更改具有对象的数组 const数组=[ {名称:“TV”,价格:12323,id:321}, {名称:“水壶”,价格:123,id:1211}, {名称:“TV”,价格:3434,id:3434312}, {姓名:“汽车”,价格:12343,id:123123}, {名称:“TV”,价格:4554,id:2313123311} ]
const数组=[
{名称:“TV”,价格:12323,id:321},
{名称:“水壶”,价格:123,id:1211},
{名称:“TV”,价格:3434,id:3434312},
{姓名:“汽车”,价格:12343,id:123123},
{名称:“TV”,价格:4554,id:2313123311}
]
常量名称匹配=(名称,id)=>{
让计数=0
返回数组.map((项)=>{
常量条件=item.name==名称和item.id!==id
常量formattedName=`${item.name}(${count+=1})`
返回{
价格:item.price,
名称:条件?格式化名称:item.name,
id:item.id
}
})
}
array.forEach((el)=>{
console.log(nameIsMatch(el.name,el.id))
})
简单的解决方法是使用旧技术将东西移动到它们所属的地方,只需重新编写一点点代码:
由于三元结构,现在有点混乱,所以您可以随时稍微放松一下:
return array.map(item => {
// Make a copy of `item`
let i = { ...item };
// Override if necessary
if (item.name === name && item.id !== id) {
i. name = `${item.name}(${count += 1})`;
}
return i;
})
这不是很简洁,但要清楚得多。简单的解决方法是使用旧技术将东西移动到它们所属的地方,只需重新编写一点点代码: 由于三元结构,现在有点混乱,所以您可以随时稍微放松一下:
return array.map(item => {
// Make a copy of `item`
let i = { ...item };
// Override if necessary
if (item.name === name && item.id !== id) {
i. name = `${item.name}(${count += 1})`;
}
return i;
})
这不是很简洁,但更清晰。您可以使用以下代码
const数组=[
{名称:“TV”,价格:12323,id:321},
{名称:“水壶”,价格:123,id:1211},
{名称:“TV”,价格:3434,id:3434312},
{姓名:“汽车”,价格:12343,id:123123},
{名称:“TV”,价格:4554,id:2313123311}];
常量哈希={};
array.forEach(函数(obj){
if(!hash[obj.name])
hash[obj.name]=1;
obj.name=`${obj.name}(${hash[obj.name]+})`;
})
console.log(数组)
您可以使用以下代码
const数组=[
{名称:“TV”,价格:12323,id:321},
{名称:“水壶”,价格:123,id:1211},
{名称:“TV”,价格:3434,id:3434312},
{姓名:“汽车”,价格:12343,id:123123},
{名称:“TV”,价格:4554,id:2313123311}];
常量哈希={};
array.forEach(函数(obj){
if(!hash[obj.name])
hash[obj.name]=1;
obj.name=`${obj.name}(${hash[obj.name]+})`;
})
console.log(数组)
使用为每个名称保留计数器的对象
const数组=[
{名称:“TV”,价格:12323,id:321},
{名称:“水壶”,价格:123,id:1211},
{名称:“TV”,价格:3434,id:3434312},
{姓名:“汽车”,价格:12343,id:123123},
{名称:“TV”,价格:4554,id:2313123311}
];
常量名称匹配=(数组)=>{
让计数={};
返回数组.map(({
名称
价格,
身份证件
}) => {
让计数=计数[名称]| | 1;
常量formattedName=`${name}(${count})`
计数[名称]=计数+1;
返回{
价格,
名称:formattedName,
身份证件
}
})
}
log(nameIsMatch(array))
使用为每个名称保留计数器的对象
const数组=[
{名称:“TV”,价格:12323,id:321},
{名称:“水壶”,价格:123,id:1211},
{名称:“TV”,价格:3434,id:3434312},
{姓名:“汽车”,价格:12343,id:123123},
{名称:“TV”,价格:4554,id:2313123311}
];
常量名称匹配=(数组)=>{
让计数={};
返回数组.map(({
名称
价格,
身份证件
}) => {
让计数=计数[名称]| | 1;
常量formattedName=`${name}(${count})`
计数[名称]=计数+1;
返回{
价格,
名称:formattedName,
身份证件
}
})
}
log(nameIsMatch(array))
JavaScript:
const数组=[
{名称:'TV',价格:12323,id:321},
{名称:'水壶',价格:123,id:1211},
{姓名:'TV',价格:3434,id:3434312},
{姓名:'Car',价格:12343,id:123123},
{名称:“TV”,价格:4554,id:2313123311},
];
常数tv_阵列=[];
让计数=1
for(设i=0;i
输出:
[{name:'TV(1)”,价格:12323,id:321},
{名称:“TV(2)”,价格:3434,id:3434312},
{名称:“TV(3)”,价格:4554,id:2313123311}]
JavaScript:
const数组=[
{名称:'TV',价格:12323,id:321},
{名称:'水壶',价格:123,id:1211},
{姓名:'TV',价格:3434,id:3434312},
{姓名:'Car',价格:12343,id:123123},
{名称:“TV”,价格:4554,id:2313123311},
];
常数tv_阵列=[];
让计数=1
for(设i=0;i
输出:
[{name:'TV(1)”,价格:12323,id:321},
{名称:“TV(2)”,价格:3434,id:3434312},
{名称:“TV(3)”,价格:4554,id:2313123311}]
const数组=[
{名称:“TV”,价格:12323,id:321},
{名称:“水壶”,价格:123,id:1211},
{名称:“TV”,价格:3434,id:3434312},
{姓名:“汽车”,价格:12343,id:123123},
{名称:“TV”,价格:4554,id:2313123311}];
const result=array.map((数据、索引)=>{
如果(data.name===“TV”){
返回{…数据,名称:'TV'+'('+index++')}
}
返回数据
})
控制台信息(结果)
const数组=[
{名称:“TV”,价格:12323,id:321},
{名称:“水壶”,价格:123,id:1211},
{名称:“TV”,价格:3434,id:3434312},
{姓名:“汽车”,价格:12343,id:123123},
{名称:“TV”,价格:4554,id:2313123311}];
const result=array.map((数据,ind
const array = [
{name: "TV", price: 12323, id: 321 },
{name: "Kettle", price: 123, id: 1211 },
{name: "TV", price: 3434, id: 3434312 },
{name: "Car", price: 12343, id: 123123123 },
{name: "TV", price: 4554, id: 2313123123311 }
]
function getAllDataName(arr){
let a = arr.map((dataName) => dataName["name"] )
let b = []
a.filter((dataName) => {
// includes() used to find the intersect of array with particular data
if(!b.includes(dataName)){
b.push(dataName)
}
})
return b
}
function remapDataName(arr, dataName){
let s = [...arr] //
console.log(s)
console.log(dataName)
dataName.forEach(function(val, counter = 0){
counter = 0
s.forEach(function(data){
if(data["name"] == val){
data["name"] += "(" + counter++ + ")"
}
})
})
return s
}
let objectName = getAllDataName(array)
let objectNameMapped = remapDataName(array, objectName)
[
{ name: 'TV(0)', price: 12323, id: 321 },
{ name: 'Kettle(0)', price: 123, id: 1211 },
{ name: 'TV(1)', price: 3434, id: 3434312 },
{ name: 'Car(0)', price: 12343, id: 123123123 },
{ name: 'TV(2)', price: 4554, id: 2313123123311 }
]