Javascript:从对象获取对象值

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

我有一个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)相关的所有信息?

尝试以下操作:

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>"); 
  }
}