【发布时间】:2018-06-28 10:36:20
【问题描述】:
我有一个数组中的对象列表,
[
{ "long_name": "1144", "short_name": "1144", "types": ["street_address"] },
{ "long_name": "New York", "short_name": "New York", "types": ["city"] },
{ "long_name": "New York County", "short_name": "New York County", "types": ["admin_area", "portal"] },
{ "long_name": "New York", "short_name": "NY", "types": ["state"] },
{ "long_name": "United States", "short_name": "US", "types": ["country"] }
]
我想要做的是创建一个新对象,但具有不同的键名。例如,第一个对象“1144”将变成类似
{
"street_short": 1144,
"street_long": 1144,
...
// second object will become like
"city_short": "New York",
"city_long": "New York",
}
这应该根据对象的类型来完成。如上例,类型是“street_address”,所以新的json变成了“street_short”和“street_long”。基本上应该根据类型是什么。
我尝试用 Lodash 做,但没有成功:
var getAddressFromGooglePlace = function(address) {
let newObj = {};
if (!address) {
return;
}
if (!address.address_components || !address.address_components.length) {
return;
}
let findInArray = function(array, keyword) {
return _.find(array, word => {
return _.find(word.types, type => {
if (type == keyword) return true;
});
});
};
let components = address.address_components;
components.forEach(element => {
if (findInArray(components, "street_number")) {
newObj.plot_short = element.short_name;
newObj.plot_long = element.long_name;
}
});
return address;
}
谢谢!
【问题讨论】:
-
请分享您的 lodash 代码尝试。
-
“基本上应该根据类型是什么。”请多加一些例子。
-
第一个和
address部分会发生什么?如果类型多于一种,应该怎么办? -
你应该循环数组,使用
for(var i=0,individualObject,l=yourArray.length; i<l; i++){ individualObject = yourArray[i]; }之类的东西,然后测试属性值并使用赋值来创建其他东西。
标签: javascript arrays angularjs object