JavaScript-在满足条件时更改键

JavaScript-在满足条件时更改键,javascript,Javascript,我想写一个函数,将对象数组作为参数。如果数组中的对象包含键“name”,我想将该键更改为“title”。然后,我想返回对象数组的更新版本,并更改所有键 这是我的尝试。它没有做我想做的事 constpeople=[{age:32},{name:'bob'},{name:'jack',age:3}]; 函数名称标题(arr){ 让结果=[]; for(设i=0;i

我想写一个函数,将对象数组作为参数。如果数组中的对象包含键“name”,我想将该键更改为“title”。然后,我想返回对象数组的更新版本,并更改所有键

这是我的尝试。它没有做我想做的事

constpeople=[{age:32},{name:'bob'},{name:'jack',age:3}];
函数名称标题(arr){
让结果=[];
for(设i=0;iconsole.log(nameToTitle(people))下面的代码应该适用于您的用例。请注意,我已将
people
更改为可变变量(不再是
const
)。基本上,所有这些操作都是迭代数组中的每个字典,如果它找到一个带有
“name”
键的字典,它将设置一个具有相同值的
“title”
键,然后删除
“name”

var people=[{age:32},{name:'bob'},{name:'jack',age:3}];
for(var i=0;iconsole.log(人)您非常接近,您的if条件是检查对象的值而不是键。因此,您需要做的就是改变:

if(arr[i][x] === 'name') // 'bob' === 'name' for {name: 'bob'}
致:

因为
for中的
x
的值(让x在arr[i])
是您要迭代的关键值

constpeople=[{age:32},{name:'bob'},{name:'jack',age:3}];
函数名称标题(arr){
让结果=[];
for(设i=0;iconsole.log(nameToTitle(people))
如果您只想将
name
属性更改为
title
,我会这样做:

函数名totitle(objsArray){
var s=objsArray.slice(),a;//复制
对于(s中的var i){
a=s[i];
如果(a.名称){
s[i].title=a.name;删除s[i].name;
}
}
返回s;
}
var objsArray=[{age:32},{name:'bob'},{name:'jack',age:3}];

log(nameToTitle(objsArray))这可能会被否决一点,但只是为了好玩:]

constpeople=[{age:32},{name:'bob'},{name:'jack',age:3}];
const result=eval(JSON.stringify(people).replace(/\bname\b/g,'title'));

控制台日志(结果)您可以映射数组中的对象,并修改具有name属性的对象,如下所示

peoples.map(people => {
      if(people.hasOwnProperty('name')) {
        let title = people.name;
        delete people.name;
        return Object.assign({}, people, {title: title});
      }
      return people;
    })

它至少应该有一些解释。关于这一点:)这里主要问题的可能重复是,
arr[i][x]
是值,而不是检查条件时的键
if(arr[i][x]=='name')
if(arr[i].name){arr[i]={title:arr[i].name}
?@PHPglue:这将破坏
年龄:32
const people = [{age: 32},{name: 'bob'},{name: 'jack', age: 3}];

// Copy all properties.  If key is 'name' change it to 'title'
const copyObjectWithTitle = obj => 
  Object.keys(obj).reduce((objAcc, key) => {
    const value = obj[key];
    return Object.assign({}, objAcc, key === 'name' ? { title: value} : { [key]: value });
  }, {})

// Map over the list. If the object has the key 'name' return a copy with the key 'title' 
const nameToTitle = (list) => list.map(obj => obj.hasOwnProperty('name') ? copyObjectWithTitle(obj) : Object.assign({}, obj))

const updatedPeople = nameToTitle(people);  
peoples.map(people => {
      if(people.hasOwnProperty('name')) {
        let title = people.name;
        delete people.name;
        return Object.assign({}, people, {title: title});
      }
      return people;
    })