Javascript:从对象

时间:2015-12-19 09:37:49

标签: 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'}]}
]

它包含每个联系人的聊天消息。如何根据messages字段获取与Rajat之类的任何用户相关的所有name

3 个答案:

答案 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,我们可以稍微缩短这段代码。