Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/457.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在具有对象的数组中查找匹配项并更改属性?_Javascript - Fatal编程技术网

Javascript 如何在具有对象的数组中查找匹配项并更改属性?

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} ]

当名称在对象属性“name”中匹配时,我想在第一次匹配时将此属性更改为“TV(1)”,并在下一次匹配时增加一个计数器,但这对我不起作用(请运行代码查看问题),我如何更改具有对象的数组

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 }
]