Javascript:从对象获取对象值
我有一个JS数组,如:Javascript:从对象获取对象值,javascript,Javascript,我有一个JS数组,如: [ {name: 'Rajat', messages: [{id: 1,message: 'Hello'},{id: 3,message: 'Hello 2'}]}, {name: 'Himesh', messages: [{id: 2,message: 'Hello'}]}, {name: 'David', messages: [{id: 4,message: 'Hello'}]} ] 它包含每个联系人的聊天信息。如何根据姓名字段获取与任何一个用户(如Rajat
[
{name: 'Rajat', messages: [{id: 1,message: 'Hello'},{id: 3,message: 'Hello 2'}]},
{name: 'Himesh', messages: [{id: 2,message: 'Hello'}]},
{name: 'David', messages: [{id: 4,message: 'Hello'}]}
]
它包含每个联系人的聊天信息。如何根据姓名字段获取与任何一个用户(如Rajat)相关的所有信息?尝试以下操作:
var data = [{
name: 'Rajat',
messages: [{
id: 1,
message: 'Hello'
}, {
id: 3,
message: 'Hello 2'
}]
}, {
name: 'Himesh',
messages: [{
id: 2,
message: 'Hello'
}]
}, {
name: 'David',
messages: [{
id: 4,
message: 'Hello'
}]
}];
console.log(data);
var ary = data.map(function(v) {
if (v.name === 'Rajat') {
return v.messages.map(function(m) {
return m.message;
});
}
});
ary = [].concat.apply([], ary);
for (var i = 0; i < ary.length; i++) {
if (typeof ary[i] === 'undefined') {
ary.splice(i, 1);
i--;
}
}
console.log(ary);
如果您使用jquery或lodash,我们可以进一步缩短此代码。演示:首先单击RunwithJS按钮
HTML:
JS:
说明:
首先,我们听按钮的点击。单击此按钮将运行showRajatMessages功能
在showRajatMessages函数中,我们循环遍历数据。如果节点的名称等于Rajat,我们将调用showMessages函数并将对象在数据数组中的位置传递为i
在showMessages函数中,我们可以访问刚刚从showRajatMessages函数传递的i
在这里,我们从数据数组中找到正确的对象,并获取messages键
对于messages键中的每个项目,我们将使用jQuery.append方法将消息添加为,并将其推入HTML中的带有id名称的结果。不清楚。你想做什么?你期望的结果是什么?@Zulhat自由撰稿人:我想在与“Rajat”相关的消息数据集中迭代,并将它们显示为聊天消息。请详细说明你想要实现的目标。好的,请查看我的答案。如果答案是您要查找的,请接受它。array.filterfunction{return e.name==='Rajat';}[0]。消息
var data = [{
name: 'Rajat',
messages: [{
id: 1,
message: 'Hello'
}, {
id: 3,
message: 'Hello 2'
}]
}, {
name: 'Himesh',
messages: [{
id: 2,
message: 'Hello'
}]
}, {
name: 'David',
messages: [{
id: 4,
message: 'Hello'
}]
}];
console.log(data);
var ary = data.map(function(v) {
if (v.name === 'Rajat') {
return v.messages.map(function(m) {
return m.message;
});
}
});
ary = [].concat.apply([], ary);
for (var i = 0; i < ary.length; i++) {
if (typeof ary[i] === 'undefined') {
ary.splice(i, 1);
i--;
}
}
console.log(ary);
["Hello", "Hello 2"]
<!DOCTYPE html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
<meta charset="utf-8">
<title>JS Bin</title>
</head>
<body>
<button type="button" onclick="showRajatMessages()">Show Rajat Messages</button>
<ul id="result"></ul>
</body>
</html>
var data = [
{name: 'Rajat',
messages: [
{id: 1, message: 'Hello'},
{id: 3, message: 'Hello 2'}
]
},
{name: 'Himesh',
messages: [
{id: 2,message: 'Hello'}
]
},
{name: 'David',
messages: [
{id: 4,message: 'Hello'}
]
},
{name: 'Rajat',
messages: [
{id: 1, message: 'Hello 3'},
{id: 3, message: 'Hello 4'}
]
}
];
function showRajatMessages() {
for (i = 0; i < data.length; i++) {
if(data[i].name == "Rajat"){
showMessages(i);
} else {
continue; // skip
}
}
}
function showMessages(i) {
console.log(i);
var messages = data[i].messages;
for (j = 0; j < messages.length; j++) {
$("#result").append("<li>" + messages[j].message + "</li>");
}
}