使用javascript将对象值与对象中的数组长度进行比较
编辑:已解决,请参见下面的最终解决方案 编辑:值名称不相同 对象1使用javascript将对象值与对象中的数组长度进行比较,javascript,Javascript,编辑:已解决,请参见下面的最终解决方案 编辑:值名称不相同 对象1 var obj1 = { val1a : 4, val2a : 3 , val3a : 7 } 具有数组的对象2 var obj2 = { val1b : [one, two, three], val2b : [oneA, twoA, threeA], val3b : [oneB] } 我正在努力做的是以下几点 if(obj1.val1a === obj2.val1b.len
var obj1 = {
val1a : 4,
val2a : 3 ,
val3a : 7
}
具有数组的对象2
var obj2 = {
val1b : [one, two, three],
val2b : [oneA, twoA, threeA],
val3b : [oneB]
}
我正在努力做的是以下几点
if(obj1.val1a === obj2.val1b.length){
// code
}
但我不想说得那么具体。是否有方法在每个对象上循环并返回与obj1不匹配的obj2值
带下划线的解决方案
function checkData(obj1, obj2) {
result = []
var keys_obj1 = Object.keys( obj1)
var keys_obj2 = Object.keys( obj2)
_.each(keys_obj1, function(num, i){
if(obj1[keys_obj1[i]].length !== obj2[keys_obj2[i]]) {
result.push(keys_obj1[i]);
}
})
return result;
}
如果您的模型不是最终模型,您可以使用如下对象数组:
var object = [
{table : [one, two, three], length : 3},
{table : [one, two, three], length : 4},
... ];
并使用以下方法比较值:
object[i].table.length === object[i].length
它和你的模型有点不同
但我希望它能有所帮助。更新:
也许是这样的。您必须确保属性名称相同:
var obj1 = {
val1a : 4,
val2a : 3 ,
val3a : 7
};
var obj2 = {
val1a : ['one', 'two', 'three'],
val2a : ['oneA', 'twoA', 'threeA'],
val3a : ['oneB']
};
for(var name in obj1) {
if(obj1[name] === obj2[name].length) {
alert("match");
}
}
最好的方法是,如果两个对象具有相同的名称(对于给定的对象对),则对其中一个对象进行迭代并返回两者的值,然后进行比较
使用为两个对象制作一个键数组来重新制作小提琴,现在即使键不相同(遵循对象索引),它也可以工作
var obj1={
val1a:4,
val2a:3,
val3a:7
}
变量obj2={
val1b:[1',2',3'],
val2b:[oneA',twoA',threeA'],
val3b:['oneB']
}
var keys_obj1=对象。键(obj1)
var keys_obj2=对象。键(obj2)
对于(i=0;i }
很冗长,但我能想到的唯一方法是:
// for each object you are going to...
function pullData(obj) {
var out = {};
var token;
// grab the keys
var keys = Object.keys(obj).map(function (el) {
// token is the character at the end of the key
// the key that is returned is the key without the token
token = el.slice(-1)
return el.slice(0, 4);
});
// for each key, add it to the output object
for (var i = 0, l = keys.length; i < l; i++) {
out[keys[i]] = obj[keys[i] + token]
}
// return an object containing the data and the token
return {data: out, token: token};
}
// take both the output from both objects being parsed
function isNotMatch(obj1, obj2) {
var out = [];
// loop over the first object using the now identical keys
for (var p in obj1.data) {
// check the values and lengths
// if they're not the same push the key and the token as a string
// to the output array
if (obj1.data[p] !== obj2.data[p].length) {
out.push(p + obj2.token);
}
}
// return the array of non-matches
return out;
}
isNotMatch(pullData(obj1), pullData(obj2));
//对于要创建的每个对象。。。
函数pullData(obj){
var out={};
var代币;
//抓住钥匙
var keys=Object.keys(obj).map(函数(el){
//令牌是密钥末尾的字符
//返回的密钥是不带令牌的密钥
令牌=el.slice(-1)
返回el.切片(0,4);
});
//对于每个键,将其添加到输出对象
对于(变量i=0,l=keys.length;i
每个对象中的键是否按名称关联?如果是,怎么做?或者你只是想按顺序比较?你是如何构建数据的?它们从来都不一样?有什么模式吗?第一个obj始终是val[i]a,第二个obj始终是val[i]b?不,它们总是不同的,如果它们是相同的,那么答案会很简单,因为你可以匹配名称。它们总是有val[num][letter]模式tho,还是一个对象有键
橙色,驼鹿
,地鼠
,例如?更新。我以为for(obj1中的var I)中的I
是一个索引,但它是属性名的名称。不幸的是,名称不一样;/否则是的,这就行了