从数组javascript创建新对象

create new object from array javascript

本文关键字:对象 新对象 数组 javascript 创建      更新时间:2023-09-26

我得到了这个对象:

var obj = {
    name : 'Allen',
    last : 'Jones',
    age : 24,
    city : 'London'
}

和这个阵列:['name', 'age', 'city']

从所选字段创建对象的最有效方法是什么?比如下面,没有删除第一个属性吗?

obj2 = {name: 'allen', age: 24, city: 'London'}

我建议使用Array#forEach()并迭代新对象的给定键。

var obj = { name: 'Allen', last: 'Jones', age: 24, city: 'London' },
    array = ['name', 'age', 'city'],
    obj2 = {};
array.forEach(function (a) {
    obj2[a] = obj[a];
});
document.write('<pre>' + JSON.stringify(obj2, 0, 4) + '</pre>');

尝试这个简单的循环

var obj = {
    name : 'Allen',
    last : 'Jones',
    age : 24,
    city : 'London'
};
var obj2 = {};
var arr = ['name','age','city'];
arr.forEach(function(val){
   obj2[val] = obj[val]; 
});

现在obj2应该只有选定的属性

您可以使用循环来遍历每个属性。有很多方法可以实现这一点,例如for循环、while循环或foreach循环。这里有一个,使用一个简单的for循环:

var obj = {
  name: 'Allen',
  last: 'Jones',
  age: 24,
  city: 'London'
};
var arr = ['name', 'age', 'city'];
var obj2 = {};
for (var i = 0; i < arr.length; i++) {
  var property = arr[i];
  obj2[property] = obj[property];
}

在这里可以看到现场示例。

您可以从现有对象中删除"last"属性,对象将与您想要的相同。

 var obj = {
              name : 'Allen',
              last : 'Jones',
              age : 24,
              city : 'London'
           }
 delete obj.last;
 console.log(obj);

希望得到帮助。

下面是一个具有所需输出的通用方法:

var obj = {
    name : 'Allen',
    last : 'Jones',
    age : 24,
    city : 'London'
};
obj2 = ['name', 'age', 'city'];
function createObject(obj, arr) {
    var newObj = {};
  
    arr.forEach(function(value) {
        if(obj.hasOwnProperty(value)) {
            newObj[value] = obj[value];
        }
    });
  
    return newObj;
}
document.write(JSON.stringify(createObject(obj, obj2)));

在这个答案下显示了许多不错的方法。这是一个函数可链接的方法。

var obj = {
           name : 'Allen',
           last : 'Jones',
            age : 24,
           city : 'London'
          },
    arr = ['name', 'age', 'city'],
    res = arr.reduce((p,c) => {p[c] = obj[c]; return p} ,{});
document.write("<pre>" + JSON.stringify(res) + "</pre>");