将JavaScript对象项插入单独的数组中

时间:2015-10-28 04:30:31

标签: javascript

我需要采取像这样的对象数组......

var users = [{
    id: 0,
    full_name: 'None',
    gravatar_url: 'http://gravatar.com/avatar/31b64e4876d603ce78e04102c67d6144?s=80'
},
{
    id: 1,
    full_name: 'Jason Davis',
    gravatar_url: 'http://gravatar.com/avatar/31b64e4876d603ce78e04102c67d6144?s=80'
},
{
    id: 2,
    full_name: 'Eric',
    gravatar_url: 'http://gravatar.com/avatar/31b64e4876d603ce78e04102c67d6144?s=80'
}];

从上面的对象构建这3个数组。数组键号应匹配所有。所以使用full_name = Jason Davis的数组应匹配ID数组

上的数组键1

这个想法是我应该能够通过这样做来重建上面的对象......

id[1]
full_name[1]  
gravatar_url[1]

以上这些都应该与用户Jason Davis一起映射到对象。

var id = [0, 1, 2];

var full_name = [
     'None',
     'Jason Davis',
     'Eric'
];

var gravatar_url = [
    'http://gravatar.com/avatar/31b64e4876d603ce78e04102c67d6144?s=80',
    'http://gravatar.com/avatar/31b64e4876d603ce78e04102c67d6144?s=80',
    'http://gravatar.com/avatar/31b64e4876d603ce78e04102c67d6144?s=80'
];

推理

我正在使用popover选择器库构建它......

enter image description here

该库只接受单个数据数组,显示为每个项目。在此图像中,它是用户名。

(为了澄清,上面的图像我手动将缩略图添加到DOM中,库还不接受每个项目的第二个数据)

通过做我的问题,我可以将用户图像分配给另一个数组

该库构建HTML这样的项目......

        for (var i in this.options.items) {
            var itemElement = $(this.options.templates.pickerItem);
            itemElement.find('i').html(this.options.items[i]);
            itemElement.data('pickerValue', this.options.items[i])
                    .on('click.picker', itemClickFn);
            this.picker.find('.picker-items').append(itemElement);
        }

它调用this.options.items[i]来获取名称。如果我有自己的第二个图像阵列,我可以使用该键以其名称显示正确的用户图像!

5 个答案:

答案 0 :(得分:2)

最简单的方法是遍历数组并将每个属性插入到适当的数组中:

var id = [], full_name = [], gravatar_url = [];
for(var i = 0; i < users.length; i++) {
    var u = users[i];                 
    id.push(u.id);
    full_name.push(u.full_name);
    gravatar_url.push(u.gravatar_url);
}

答案 1 :(得分:1)

您可以将.map用于此

试试这个

var id=users.map(function(x){ return x.id; });
console.log(id);
var full_name=users.map(function(x){ return x.full_name; });
console.log(full_name);
var gravatar_url=users.map(function(x){ return x.gravatar_url; });
console.log(gravatar_url);

<强>段

var users = [{
    id: 0,
    full_name: 'None',
    gravatar_url: 'http://gravatar.com/avatar/31b64e4876d603ce78e04102c67d6144?s=80'
},
{
    id: 1,
    full_name: 'Jason Davis',
    gravatar_url: 'http://gravatar.com/avatar/31b64e4876d603ce78e04102c67d6144?s=80'
},
{
    id: 2,
    full_name: 'Eric',
    gravatar_url: 'http://gravatar.com/avatar/31b64e4876d603ce78e04102c67d6144?s=80'
}];

var id=users.map(function(x){ return x.id; });
console.log(id);
var full_name=users.map(function(x){ return x.full_name; });
console.log(full_name);
var gravatar_url=users.map(function(x){ return x.gravatar_url; });
console.log(gravatar_url);

答案 2 :(得分:1)

您可以在此处使用地图功能。

var names = users.map(function(item) {
    return item['full_name'];
});

现在名称是你想要的full_names数组。

答案 3 :(得分:1)

这是一种简单的做事方式。

过程是 -

读取数组,根据需要将数据存储到特定的数组中。使用索引访问它们。

var users = [{
    id: 0,
    full_name: 'None',
    gravatar_url: 'http://gravatar.com/avatar/31b64e4876d603ce78e04102c67d6144?s=80'
},
{
    id: 1,
    full_name: 'Jason Davis',
    gravatar_url: 'http://gravatar.com/avatar/31b64e4876d603ce78e04102c67d6144?s=80'
},
{
    id: 2,
    full_name: 'Eric',
    gravatar_url: 'http://gravatar.com/avatar/31b64e4876d603ce78e04102c67d6144?s=80'
}];

var id_arr=[];
var name_arr=[];
var gravatar_url_arr=[];

for (var i=0; i<users.length;i++)
{
  id_arr[i] = users[i].id;
  name_arr[i] = users[i].full_name;
  gravatar_url_arr[i] = users[i].gravatar_url;
}

//Displaying all arrays
console.log(id_arr);
console.log(name_arr);
console.log(gravatar_url_arr);

//Get's the result what you need
console.log(id_arr[1]);
console.log(name_arr[1]);
console.log(gravatar_url_arr[1]);

演示 - JSFiddle

答案 4 :(得分:0)

尝试使用for循环,while循环,Object.keys()

var len = users.length, max = len * len, res = [];
for (var i = 0, j = len; i < max; i++) {
   if (!res[i % j]) {
     res[i % j] = Array();
     var k = 0;
     while (k < len) {
       res[i % j][k] = users[k][Object.keys(users[i % j])[i % j]];
       ++k;
     } 
   } 
}

var id = res[0], full_name = res[1], gravatar = res[2];

&#13;
&#13;
var users = [{
  id: 0,
  full_name: 'None',
  gravatar_url: 'http://gravatar.com/avatar/31b64e4876d603ce78e04102c67d6144?s=80'
}, {
  id: 1,
  full_name: 'Jason Davis',
  gravatar_url: 'http://gravatar.com/avatar/31b64e4876d603ce78e04102c67d6144?s=80'
}, {
  id: 2,
  full_name: 'Eric',
  gravatar_url: 'http://gravatar.com/avatar/31b64e4876d603ce78e04102c67d6144?s=80'
}];

var len = users.length, max = len * len, res = [];
for (var i = 0, j = len; i < max; i++) {
   if (!res[i % j]) {
     res[i % j] = Array();
     var k = 0;
     while (k < len) {
       res[i % j][k] = users[k][Object.keys(users[i % j])[i % j]];
       ++k;
     } 
   } 
}

var id = res[0], full_name = res[1], gravatar = res[2];

console.log(JSON.stringify(res, null, 2)
            ,"\n\n", id[1], full_name[1], gravatar[1])
&#13;
&#13;
&#13;