Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/443.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用javascript将对象值与对象中的数组长度进行比较_Javascript - Fatal编程技术网

使用javascript将对象值与对象中的数组长度进行比较

使用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

编辑:已解决,请参见下面的最终解决方案

编辑:值名称不相同

对象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.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
是一个索引,但它是属性名的名称。不幸的是,名称不一样;/否则是的,这就行了