【问题标题】:How do I compare every element in a multidimensional array? [duplicate]如何比较多维数组中的每个元素? [复制]
【发布时间】:2017-12-25 14:49:05
【问题描述】:

我将不胜感激。

已对此进行了编辑,以更清楚地描述应如何评估数组。

我试图弄清楚如何比较多维数组的所有元素以确定这些元素是否包含一个真实的集合。

标准

  1. 我不会提前知道阵列会有多大(可能是 2,可能是 1000)。
  2. 每个数组元素都有两个需要比较的特征(颜色和类型)。
  3. 如果任何两个元素共享任何特征值,则所有元素都必须共享该特征值。
  4. “颜色”和“类型”的值可以作为纯文本进行比较,它们是否匹配,不可能有任何变化。 IE。绿色!=格林。
  5. 该函数只需要根据是否为真集合返回真或假。
  6. 可以使用 JavaScript、PHP 或 C 语言提供任何帮助。我可以推断。

数组示例

var obj = {  
    'Element001' : {  
        'ID' : 'value',  
        'Color' : 'value',  
        'Type' : 'value'  
    },  
    'Element002' : {  
         'ID' : 'value',  
         'Color' : 'value',  
         'Type' : 'value'  
    }  
    ...  
};  

不同数组如何评估的示例。

以下数组的计算结果应为“TRUE”,因为所有元素都是红色的,并且没有元素共享一个类型。

var obj = {  
    'Element001' : {  'ID' : '1', 'Color' : 'red', 'Type' : 'b'  },  
    'Element002' : {  'ID' : '2', 'Color' : 'red',  'Type' : 'a'  }  
    'Element003' : {  'ID' : '21', 'Color' : 'red', 'Type' : 'c'  }  
};  

以下数组的计算结果应为“TRUE”,因为所有元素都是“b”类型,并且没有元素共享颜色。

var obj = {  
    'Element001' : {  'ID' : '1', 'Color' : 'red', 'Type' : 'b'  },  
    'Element002' : {  'ID' : '2', 'Color' : 'blue', 'Type' : 'b'  }  
    'Element003' : {  'ID' : '21', 'Color' : 'green', 'Type' : 'b'  }  
};  

以下数组的计算结果应为“TRUE”,因为所有元素都是“蓝色”并且所有元素都是“c”类型。

var obj = {  
    'Element001' : {  'ID' : '1', 'Color' : 'blue',  'Type' : 'c'  },  
    'Element002' : {  'ID' : '2', 'Color' : 'blue',  'Type' : 'c'  }  
    'Element003' : {  'ID' : '21', 'Color' : 'blue',  'Type' : 'c'  }  
};  

以下数组的计算结果应为“FALSE”,因为两个元素共享“红色”颜色。每条规则:如果任何两个元素共享一个特性,它们都必须共享它。因此,所有元素都必须是红色的。同样在这个例子中,没有元素共享一个类型。但即使它们都是“a”类型,由于颜色属性,它仍然会评估为“FALSE”。

var obj = {  
    'Element001' : {  'ID' : '1', 'Color' : 'red', 'Type' : 'b'  },  
    'Element002' : {  'ID' : '2', 'Color' : 'red', 'Type' : 'a'  },  
    'Element003' : {  'ID' : '21', 'Color' : 'blue', 'Type' : 'c'  }  
};

另一个评估为“FALSE”的集合是没有共享特征的集合。
比如这样的……

var obj = {  
    'Element001' : {  'ID' : '1', 'Color' : 'red', 'Type' : 'b'  },  
    'Element002' : {  'ID' : '2', 'Color' : 'green', 'Type' : 'a'  },  
    'Element003' : {  'ID' : '21', 'Color' : 'blue', 'Type' : 'c'  }  
};

【问题讨论】:

  • @CIsForCookies 因为他只想比较ColorType。不是整个对象。
  • @ClsForCookies 有时会产生假阴性。
  • 给出的格式不是一个实际的数组。它是一个嵌套对象,其中第一级属性使用的名称或多或少被滥用来暗示顺序。为什么不使用实际的对象数组?
  • @ClsForCookies 当这让我感到厌烦时,字符串表示很长。不要以为我能给你一个可靠的案例。
  • @Paul 我不确定长字符串表示,但JSON.stringify() 确实依赖于相同的属性顺序。即使顺序不同,从技术上讲,2 个对象仍然是相同的。这就是它产生假阴性的地方。

标签: javascript arrays json


【解决方案1】:

按照以下示例进行操作

var obj = {  
    'Element001' : {  
        'ID' : '1',  
        'Color' : 'Red',  
        'Type' : 'X'  
    },  
    'Element002' : {  
         'ID' : '2',  
         'Color' : 'Green',  
         'Type' : 'X'  
    }  
};

for(var x in obj){
    if(obj[x].Color=="Green")
    {
       console.log("ID : " +obj[x].ID+" has color Green");
    }
}

如果你不想那样,那么你可以使用这个代码

var obj = {  
    'Element001' : {  'ID' : '1', 'Color' : 'red', 'Type' : 'b'  },  
    'Element002' : {  'ID' : '2', 'Color' : 'red',  'Type' : 'a'  },
    'Element003' : {  'ID' : '21', 'Color' : 'red', 'Type' : 'c'  }  
};

var Keys=Object.keys(obj);
var _color=obj[Keys[0]].Color;
var _type=obj[Keys[0]].Type;
var _isSameColor=true;
var _isSameType=true;
for(var x=1;x<Keys.length;x++){
    _isSameColor=_isSameColor&_color==obj[Keys[x]].Color;
    _isSameType=_isSameType&_type==obj[Keys[x]].Type;
}
console.log(_isSameColor);
console.log(_isSameType);
if(_isSameColor||_isSameType){
   alert("True");
}
else{
   alert("False");
}

【讨论】:

  • 请解释更多,这样我才能给出答案,我没有得到你想要的
  • 我没有测试特定值。我不知道这些值可能是什么。我已经添加了示例。感谢您的宝贵时间。
  • 尝试第二个示例它会有所帮助
  • 我想你想要那样。如果您有解决方案,请接受答案
  • 很抱歉花一点时间回到这个问题上。第二个是完美的。我可以用 C 完全重写它并将其包装在一个函数中。感谢您的帮助!
【解决方案2】:

你应该使用方括号符号:[]

var obj = [  
        'Element_1' : {  
            'ID' : '1',  
            'Color' : 'Red',  
            'Type' : 'X'  
        },  
        'Element_2' : {  
             'ID' : '2',  
             'Color' : 'Green',  
             'Type' : 'X'  
        }  
    ];

   for(var i = 0 ; i++ ;  i < obj.length){
    if(obj[i].Color=="Green") {
     console.log("ID : " +obj[i].ID+" has color Green");
    }
   }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-28
    • 1970-01-01
    相关资源
    最近更新 更多