我正在调用外部服务,我得到了这样的返回域对象:
var domainObject = responseObject.json();
这会将响应对象转换为js对象。然后,我可以轻松地访问此对象上的属性,如此
var users = domainObject.Users
用户是一组键/值对,如下所示:
1: "Bob Smith"
2: "Jane Doe"
3: "Bill Jones"
但是CDT将用户显示为对象类型,而用户[0]返回undefined。那么如何才能获得集合中第一个项目的句柄?我假设需要某种类型的类型转换,但不确定我应该怎么做呢
更新
以下是我可以访问这些值的一种方法:
//get first user key
Object.keys(responseObject.json().Users)[0]
//get first user value
Object.values(responseObject.json().Users)[0]
但是我需要通过ng2进行数据绑定,所以我希望有一个更简单的方法:
<div>
<div *ngFor="let user of users">
User Name: {{user.value}}
<br>
</div>
</div>
也许我应该在ng2组件中创建一个转换函数,在设置数据绑定变量之前将对象转换为我需要的内容?
答案 0 :(得分:1)
这个怎么样:
let user= this.users.find(() => true)
这应该返回&#34;第一个&#34;之一。
答案 1 :(得分:1)
更新的答案
所以在浏览了几篇文档后,我发现了“新的”Object.entries()
javascript函数。 You can read about it here。很酷。
无论如何,试一试。我很惭愧地说我没有时间去测试它,但它应该让你朝着正确的方向前进。
usersArray = []
// Turn Users object into array of [key, value] sub arrays.
userPairs = Object.entries(users);
// Add the users back into an array in the original order.
for (i=0; i < userPairs; i++) {
usersArray.push(_.find(userPairs, function(userPair) { return userPair[0] == i }))
}
原始回答
我会使用underscore.js或lodash来执行此操作。在处理数据结构和将代码保持在最低限度方面,两者都是非常有用的库。我个人会在lodash中使用_.values
函数。 Read more about it here.。然后,您可以使用users[0]
来检索第一个项目。
唯一需要注意的是,lodash不保证迭代序列与传入对象时的迭代序列相同。
users = _.values(users);
console.log(users[0]);
答案 2 :(得分:0)
如果您的初始对象只是一个普通对象,您如何知道它是如何排序的。属性成员未排序,即:循环顺序也不保证。我将用户名提取到一个数组中,然后用第二个单词对数组进行排序。这应该有用(只要姓氏是第二个单词,只有一个空格用作分隔符)。
var l=[];
for(var x in users) {
push.l(users[x]);
}
var l1=l.sort ( (a,b) => return a.split(" ")[1]<b.split(" ")[1]);