JavaScript-在满足条件时更改键
我想写一个函数,将对象数组作为参数。如果数组中的对象包含键“name”,我想将该键更改为“title”。然后,我想返回对象数组的更新版本,并更改所有键 这是我的尝试。它没有做我想做的事JavaScript-在满足条件时更改键,javascript,Javascript,我想写一个函数,将对象数组作为参数。如果数组中的对象包含键“name”,我想将该键更改为“title”。然后,我想返回对象数组的更新版本,并更改所有键 这是我的尝试。它没有做我想做的事 constpeople=[{age:32},{name:'bob'},{name:'jack',age:3}]; 函数名称标题(arr){ 让结果=[]; for(设i=0;i
constpeople=[{age:32},{name:'bob'},{name:'jack',age:3}];
函数名称标题(arr){
让结果=[];
for(设i=0;i console.log(nameToTitle(people))代码>下面的代码应该适用于您的用例。请注意,我已将people
更改为可变变量(不再是const
)。基本上,所有这些操作都是迭代数组中的每个字典,如果它找到一个带有“name”
键的字典,它将设置一个具有相同值的“title”
键,然后删除“name”
键
var people=[{age:32},{name:'bob'},{name:'jack',age:3}];
for(var i=0;i console.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;i console.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;
})