我有一个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'}]}
]
它包含每个联系人的聊天消息。如何根据messages
字段获取与Rajat
之类的任何用户相关的所有name
?
答案 0 :(得分:1)
演示:http://jsbin.com/gaxalupuka/edit?html,js,output(首先点击Run with JS
按钮)
<强> HTML 强>:
<!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>
<强> JS 强>:
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>");
}
}
<强>解释强>:
首先,我们听按钮点击。此按钮单击将运行showRajatMessages()
功能。
在showRajatMessages()
函数内部,我们循环访问数据。如果节点的name
等于Rajat
,我们将调用showMessages()
函数并将data
数组中的对象位置作为i
传递。
在showMessages()
函数中,我们可以访问刚从i
函数传递的showRajatMessages()
。
所以在这里,我们从data
数组中找到正确的对象并抓取messages
键。
对于messages
密钥中的每个项目,我们会将message
添加为<li>
并将<li>
推送到ID为<ul>
的{id}名称使用jQuery result
方法在HTML中使用.append()
。
答案 1 :(得分:0)
var array= [
{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'}]}
]
var filteredArray= array.filter(function(value)
{
if(value.name === 'Rajat')
{
return true;
}
else
return false;
})
return filteredArray[0].messages;
答案 2 :(得分: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"]
如果你使用jquery或lodash,我们可以稍微缩短这段代码。