2016-02-08 7 views
-2

У меня есть данные:Проверьте объект уже существует в массиве в Vue.js

data: function() { 
     return { 
      conversations: 
      [ 

      ] 
     } 
} 

Я получаю мои данные из объекта ответа: response.data.conversation

Есть ли способ, чтобы проверить this.conversations уже содержит response.data.conversation?

+0

В каких типах данных содержатся данные 'this.conversations' - объекты или примитивы? Если объекты, у вас есть способ однозначно идентифицировать объект? – Peter

+0

Я не уверен, как я могу это проверить? – nix9

+0

@Peter [screen] (http://scr.hu/6s5a/uglgl) -> вот что я получил с 'console.log (this.conversations)' – nix9

ответ

0

Я понял это:

Используется underscore.js.

Iterate trought все объекты в массиве и сравнить их с _.isEqual(a,b) функции

var count=0;

for(var i=0; i<this.conversations.length; i++) { 
    if(_.isEqual(this.conversations[i], response.data.conversation)) { 
     count++; 
    } 
} 

Затем проверьте значение count переменной:

if (count == 0) { 
    //Add element to array 
    this.conversations.push(response.data.conversation); 
} else { 
    console.warn('exists'); 
} 
2

Чтобы строить свой ответ, если вы уже используете underscore или lodash, вы можете использовать i ц _.any()/_.some() функция:

var exists = _.any(this.conversations, function(conversation) { 
    return _.isEqual(conversation, response.data.conversation); 
}) 

Вы также можете использовать Array.prototype.some сделать такую ​​же вещь:

var exists = this.conversations.some(function(conversation) { 
    return _.isEqual(conversation, response.data.conversation); 
}) 

преимущества этих над вашим решением является то, что они вернутся, как только они находят (вместо повторения по всему массиву), хотя вы можете легко обновить свой код, чтобы вырваться из цикла раньше.

Кроме того, в то время как _.isEqual() - это круто, вы можете избежать некоторых простых сопоставлений свойств (если ваши объекты достаточно плоские или, что еще лучше, у вас есть ключ, который однозначно идентифицирует разговор), чтобы определить, эквивалентны:

var exists = this.conversations.some(function(conversation) { 
    return conversation.id === response.data.conversation.id; 
}) 
+1

Спасибо! Я попробую ваше решение. – nix9

+0

И как вы сказали, у меня есть беседа, которая уникальна для каждого разговора. – nix9

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