2017-09-01 93 views
1

嗯,我在ES6中有一個場景,我使用vuejs作爲當前模塊。檢查對象值是否等於字符串值

我需要檢查數組對象中是否存在字符串值。

let obj1 = [{name: "abc ced", id: 1}, 
      {name: "holla' name", id: 2}, 
      {name: "3' name", id: 3}] 
let obj2 = { key: "3' name" , key1: 2 } 

我需要爲obj1獲取對象,其中obj2的名稱屬性值存在於obj1中。這樣做就像

_.each(obj1, function(obj){ 
    for (var k in obj) { 
     if (!obj.hasOwnProperty(k)) continue 
      if (obj[k] === obj2.key) { 
        console.log(obj) 
      } 
     } 
    }) 

我錯過了什麼嗎?因爲控制檯從不記錄任何值。

注:

我使用loadash,並試圖用找過

let result = _.find(obj1 , {name: obj2.key}) 
console.log(result) 

它會工作,如果將嘗試使用

let result = _.find(obj1 , {id: obj2.key1}) 
console.log(result) 

所以對於它的工作原理整數比賽很好,但對於字符串沒有控制檯。

但看起來什麼都沒有。然後我嘗試了上面給出的其他解決方案

注意:一切工作正常,只有我缺少的是我沒有檢查字符串大小寫,因爲有一些大寫和大寫的問題。所以隱蔽可比字符串小寫和大寫,所以你不,至少使這些愚蠢的錯誤

歡呼

+0

你所檢查的'obj1.key'。應該是'obj2.key' –

+0

可以請你清楚一件事,你想檢查obj1中的某個特定的密鑰,比如'name',還是隻想找到與obj1中存在的任何密鑰匹配? – RaghavGarg

+0

@RaghavGarg我想檢查是否在obj1中,有任何名稱等於obj2.key的對象。所以它是obj1 –

回答

3

如果你想獲得該條件返回true第一個對象,你可以使用find()否則你可以使用filter()

let obj1 = [{name: 'abc ced', id: 'ced'}, 
 
      {name: 'holla name', id: 'xyz'}] 
 
let obj2 = { key: 'abc ced' } 
 

 
var result = obj1.find(({name}) => obj2.key == name) 
 
console.log(result)

+0

感謝您的回覆,嘗試但沒有運氣,您能否看到我更新的問題,再次感謝。 –

0

可以使用lodash _.find。閱讀更多關於lodash find

let obj1 = [ 
 
    { name: "abc ced", id: "ced"}, 
 
    { name: "holla' name", id: "xyz"}, 
 
    { name: "3' name", id: "xz"}, 
 
    { name: 5, id: "yz"} 
 
]; 
 
let obj2 = { key: "3' name" } 
 
let obj3 = { key: 5 } 
 

 
var result = _.find(obj1, { name: obj2.key }); 
 
console.log(result) 
 

 
var result = _.find(obj1, { name: obj3.key }); 
 
console.log(result)
<script src="https://cdn.jsdelivr.net/npm/[email protected]/lodash.min.js"></script>