Javascript 在LODASH中,断言对象或数组中是否存在键的最佳方法是什么?

Javascript 在LODASH中,断言对象或数组中是否存在键的最佳方法是什么?,javascript,arrays,object,frontend,lodash,Javascript,Arrays,Object,Frontend,Lodash,在我的项目中,我可以收到两种不同的回复: var data ={ 'ADULT':{}, 'bounds':[], 'checkInEligible':true, 'departureDate':'2016-07-15', 'id':'car' } var data = { ADULT:{ 'confirmationNumber':'29YNK', 'checkInEligible':true }, bounds:[], departureD

在我的项目中,我可以收到两种不同的回复:

var data ={
  'ADULT':{},
  'bounds':[],
  'checkInEligible':true,
  'departureDate':'2016-07-15',
  'id':'car'
}
var data = {
  ADULT:{
    'confirmationNumber':'29YNK',
    'checkInEligible':true
  },
  bounds:[],
  departureDate:"2016-07-15",`enter code here`
  id:"air"
}
或者我也可以得到答复:

var data ={
  'ADULT':{},
  'bounds':[],
  'checkInEligible':true,
  'departureDate':'2016-07-15',
  'id':'car'
}
var data = {
  ADULT:{
    'confirmationNumber':'29YNK',
    'checkInEligible':true
  },
  bounds:[],
  departureDate:"2016-07-15",`enter code here`
  id:"air"
}
我需要用一些lodash方法断言,在响应的某个级别上存在键“checkInqualible”

我尝试过这种方法。有些,但似乎只适用于数组和根级别,因为只有当对象操作系统位于根级别时,才会返回true

我试过这个:

isCheckInEligible: function () {
    return _.some(data, function (value, key) {
        return key === 'checkInEligible' && value
    });
}
或者这个:

isCheckInEligible: function () {
    return _.some(data, 'checkInEligible');
}
有人能帮我用这个lodash方法或任何其他lodash方法吗? 但我得用洛达斯


谢谢

可能使用
\uhas

isCheckInEligible: () => {
    return _.has(data, 'checkInEligible') || _.has(data, 'ADULT.checkInEligible');
}

下面是一个递归检查对象
has-a
树,以查看包含的任何对象是否具有您要查找的属性(对象属性)

函数nestedHas(对象,属性){
if(u.has(object,attrib)){
返回true;
}
for(输入u.pickBy(对象,u.isObject)){
if(nestedHas(object[key],attrib)){
返回true;
}
}
返回false;
}
您可以使用遍历对象和数组来检查某个键是否存在于任何级别。只需确保命名
lodash#some
迭代对象即可递归遍历对象/数组

function hasKeyDeep(object, key) {
  return _.has(object, key) || _.isObject(object) &&
    _.some(object, _.partial(hasKeyDeep, _, key));
}
函数hasKeyDeep(对象,键){
return u.has(object,key)| | u.isObject(object)&&
_.some(object,部分(hasKeyDeep,key));
}
console.log(hasKeyDeep)({
“成人”:{},
“边界”:[],
“checkInqualible”:正确,
‘出发日期’:‘2016-07-15’,
“id”:“car”
},“checkInqualible”);//=>真的
console.log(hasKeyDeep)({
“成人”:{},
“边界”:[],
‘出发日期’:‘2016-07-15’,
“id”:“car”
},“checkInqualible”);//=>假的
console.log(hasKeyDeep)({
成人:{
“确认号”:“29YNK”,
“checkInqualible”:true
},
界限:[],
出发日期:“2016-07-15”,
id:“空气”
},“checkInqualible”);//=>真的
console.log(hasKeyDeep)({
成人:{
“确认号”:“29YNK”
},
界限:[],
出发日期:“2016-07-15”,
id:“空气”
},“checkInqualible”);//=>假的
console.log(hasKeyDeep)({
界限:[{
“checkInqualible”:正确,
“其他值”:“其他值”
}]
},“checkInqualible”);//=>真的
console.log(hasKeyDeep)({
界限:[{
“其他值”:“其他值”
}]
},“checkInqualible”);//=>假的
console.log(hasKeyDeep)({
a:[{
b:[{
c:[{
d:[{
“checkInqualible”:true
}]
}]
}]
}]
},“checkInqualible”);//=>真的
console.log(hasKeyDeep)({
a:[{
b:[{
c:[{
d:[{
“anotherKey”:正确
}]
}]
}]
}]
},“checkInqualible”);//=>错误
body>div{top:0;最小高度:100%;}

data.checkInquality | | data.成人.checkInquality怎么样?您上面的
isCheckInEligible
&&value
使您似乎不仅对密钥的存在感兴趣,而且对其值也感兴趣。问题是我可以有不同的路径,不仅仅是这两条。我需要检查物体上所有的槽。非常感谢。那么你的问题就不清楚了。您说过“我可以收到两种不同的响应”,而就我所知,只有两种可能的路径-
数据。checkInquality
数据。成人。checkInquality
。您还需要说明哪些其他路径?例如,
data.CHILD.checkInquality
?你是对的,到目前为止,我有两个不同的,但我意识到我可以在这个响应上得到更多不同的排列。所以我想知道是否有一种洛达斯方法可以给我答案,无论钥匙在哪里?再次感谢你们!您只对密钥的存在感兴趣还是对其价值感兴趣?(参见我的第一条评论)另外-array不能有键(“…对象或数组中是否存在键?”)问题是我可以有不同的路径,而不仅仅是这两条路径。我需要检查物体上所有的槽。非常感谢。莱昂纳多,你能再举几个例子说明你的数据可能是什么样的吗…@LeonardoUribe你应该在问题中具体说明(你说你有两种类型的回答)-以及哪一个层次的深度。此外,如果这是你要找的,你可能想重新表述一下你的问题,并扩展你给出的例子。