2015-12-19 6 views
-6

У меня есть JS массив, как:JavaScript: получить значение объекта от объекта

[ 
{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'}]} 
] 

Он содержит сообщение чата для каждого contact.How я могу получить все messages, связанные с каким-либо пользователем, как Rajat основанными на name поле?

+0

Не ясно. Что вы пытаетесь сделать? Каков ваш ожидаемый результат? –

+0

@zulhfreelancer: Я хочу перебирать набор данных 'messages', относящийся к 'Rajat', и отображать их в виде сообщений чата –

+0

, пожалуйста, будьте немного более подробными в отношении того, чего вы хотите достичь. – Blip

ответ

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; 
+1

'array.filter (function (e) {return e.name === 'Rajat';}) [0] .messages' – Tushar

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, мы можем сократить этот код немного больше.

1

Demo: 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> в <ul> с именем идентификатора result внутри HTML, используя JQuery .append() метод.

Смежные вопросы