Javascript 检查对象是否只包含一个或两个项目

Javascript 检查对象是否只包含一个或两个项目,javascript,Javascript,我有一个奇怪的问题要解决,让我们假设您有两个可以返回的对象示例: 例1: {name: "something", age: 17, money: 700} 例2: {age: 17, money: 700} 例3: {age: 17} // Or {money: 700} 这是我需要检查的。如果对象只有年龄或金钱或年龄和金钱 是否有一种使用lodash或纯javascript的方法更喜欢lodash说:您是否包含或包含或包含并包含其他内容,而其他内容都不重要。尝试使用Object.keys

我有一个奇怪的问题要解决,让我们假设您有两个可以返回的对象示例:

例1:

{name: "something", age: 17, money: 700}
例2:

{age: 17, money: 700}
例3:

{age: 17} // Or
{money: 700}
这是我需要检查的。如果对象只有年龄或金钱或年龄和金钱

是否有一种使用lodash或纯javascript的方法更喜欢lodash说:您是否包含或包含或包含并包含其他内容,而其他内容都不重要。

尝试使用Object.keys、Array.prototype.every

变量obj1={ 名字:某物, 年龄:17岁, 货币:700 }; 变量obj2={ 年龄:17岁, 货币:700 } 变量obj3={ 年龄:17 } //或 变量obj4={ 货币:700 } 变量检查=函数v{ 返回v==年龄| v==金钱 } var res1=Object.keysobj1.everycheck; var res2=Object.keysobj2.everycheck; var res3=Object.keysobj3.everycheck; var res4=Object.keysobj4.everycheck;
console.logres1、res2、res3、res4Javascript不是我最擅长的技能,所以我相信这是可以优化的

var a = {name: "something", age: 17, money: 700};

if(Object.keys(a).length == 1 && (a.hasOwnProperty("age") || a.hasOwnProperty("money")) || (Object.keys(a).length == 2 && a.hasOwnProperty("age") && a.hasOwnProperty("money"))) {
  // yes
}
使用Object.keysany_obj.length获取对象中的键数

var x = {name: "something", age: 17, money: 700};
var obj = Object.keys(x);

if((obj.length==2 && x.hasOwnProperty("age") && x.hasOwnProperty("money")) || (obj.length==1 && (x.hasOwnProperty("age") || x.hasOwnProperty("money")))){
    // Condition met.
}

您的需求不是很清楚,但我认为这就是您正在尝试做的,或者如果我没有正确理解您的需求,您可能需要稍微更改逻辑

函数customTestobj,list{ var keys=Object.keysobj; var uniq=q.uniquelist; if!uniq.length | |!keys.length&!uniq.length{ 返回true; } 如果!keys.length | | keys.length>uniq.length{ 返回false; } 如果keys.length==uniq.length{ 返回uu.isEqualkeys,uniq; } 返回uniq.somefunctionitem{ 返回!\包括桌面、项目; }; } var out=document.getElementById'out'; out.textContent+=customTest{},['age','money']+'\n';//错误的 out.textContent+=自定义测试{ 名字:某物, 年龄:17岁, 货币:700 },[]+'\n';//符合事实的 out.textContent+=自定义测试{ 名字:某物, 年龄:17岁, 货币:700 },[“年龄”,“金钱”]+'\n';//错误的 out.textContent+=自定义测试{ 名字:某物, 年龄:17岁, 货币:700 },['age','age']+'\n';//错误的 out.textContent+=自定义测试{ 年龄:17岁, },['age','age']+'\n';//符合事实的 out.textContent+=自定义测试{ 名字:某物, 年龄:17岁, 货币:700 },['age','oranges']+'\n';//错误的 out.textContent+=自定义测试{ 年龄:17岁, 货币:700 },[“年龄”,“金钱”]+'\n';//符合事实的 out.textContent+=自定义测试{ 年龄:17 },[“年龄”,“金钱”]+'\n';//符合事实的 out.textContent+=自定义测试{ 货币:700 },[“年龄”,“金钱”]+'\n';//符合事实的
如果两者都有呢???我也有一个要求,这也是,只是看看它,似乎并没有检查,如果这些是他唯一的钥匙。你有Jsbin或小提琴吗?好的,这是正确的轨道。获取密钥并检查阵列。如果找到这两个值中的一个,并且数组大小大于2,那么您知道它得到的比所需的多keys@KyleAdams如果两者都有呢???如果对象只有年龄或金钱或年龄和金钱,请参见OP at查看更新post@LGSon这似乎不起作用:?这是不对的。请参见复制值obj3作为res3和res4处Object.keys的参数,在res4处调整为obj4在这里您有一个打字错误,检查了obj3两次,这就是为什么控制台结果显示错误:var res4=Object.keysobj3.everycheck;使用hasOwnProperty,否则x.age=0或x.money=0将无法通过此测试。@ChrisGciso x={age:0};那么即使是x.hasOwnPropertyage也会返回true。@它会作废,但您的比较不会!正如OP.@void所说的,这就是问题所在,如果你测试x.age,它为0,你会得到false,但是x。hasOwnProperty“age”将返回true。