2017-05-23 204 views
-1

我一直在这里一段时间,无法弄清楚我有什么以及如何使用它。从现有对象创建新对象

当我使用console.log,我得到这个回:

description:"Some text here" 
id:1234 
location:Array(1) 
name:"Some Name" 
tags: 
Array(7) 
0:Object 
name:"Landmark" 
public_id:"landmark" 
__proto__ 
1:Object 
name:"Park" 
public_id:"park" 
__proto__ 

我期待得到的东西是这样的:

{id:1234,tags:[landmark,park]} 

我可以得到id部分罚款与此:

var thePlaces=[]; 
$.each(data, function(index, val) { 
     thePlaces.push({ 
       id:val.id 
      }) 
      }) 

我该如何去添加标签到各自的id现在?

+0

你的对象似乎代表着你想要什么已经。 –

回答

1

您需要遍历每个datatags(一个数组)以获取标签名称。
因此,循环内的另一个循环迭代了data

var thePlaces=[]; 
$.each(data, function(index, val) { 

    var tagNames=[]; 

    $.each(val.tags, function(i,tagVal){ 
    tagNames.push(tagVal.name) 
    } 

    thePlaces.push({ 
    id:val.id, 
    tags: tagNames 
    }); 
}); 
+0

谢谢,但这不是我所需要的。标签仍然在一个数组中,我正在寻找更多像这样的:'{id:1234,tags:[“landmark”,“park”]}'而不是'{id:1234,tags:[0:'landmark “,1:”park“]}'(这就是现在给我的) – jonmrich

+0

当你用'JSON.stringify'的时候,'0:'和'1:'显示出来。数组**必须有**键。它可能是一个字符串的整数(在关联数组中)。该对象现在是有效的。 –

1

使用Array#map()创建基于另一个数组一个新的数组:

// map main array 
var thePlaces= data.map(function(item){ 
    // map location array to get tags array 
    var tags = item.location.map(function(loc){ 
     return loc.name; 
    }); 
    // new object to return for each item in "data" 
    return { 
     id: item.id, 
     tags: tags 
    };  
}); 
+0

谢谢,但这不是我所需要的。标签仍然在一个数组中,我正在寻找更多像这样的:'{id:1234,tags:[“landmark”,“park”]}'而不是'{id:1234,tags:[0:'landmark “,1:”park“]}'(这正是我现在所能提供的) – jonmrich

+0

提供了实际的数据样本,而不是你在控制台中看到的。很难操纵那回到真正的数据结构来创建工作演示 – charlietfl

+0

我很想这样做,但不知何故,我有问题得到那个。我不完全确定数据类型是什么,以及如何以“原始”格式将其取出。出于某种原因,我一直在为此而挣扎。建议? – jonmrich