2017-09-01 81 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>

相关问题