ตรวจสอบว่าทุกค่าของอาร์เรย์มีค่าเท่ากันหรือไม่


190

ฉันต้องการหาอาร์เรย์ที่ค่าทั้งหมดเท่ากัน วิธีที่เร็วที่สุดในการทำเช่นนี้คืออะไร? ฉันควรวนรอบมันและเปรียบเทียบค่าหรือไม่

['a', 'a', 'a', 'a'] // true
['a', 'a', 'b', 'a'] // false

1
@TJCrowder ฉันพนันได้เลยว่าคุณกำลังคิดเกี่ยวกับทางออกที่ดีที่สุดอยู่แล้ว)
VisioN

2
@TJCrowder: ไม่ต้องพูดถึงความเต็มใจของผู้ถามที่จะยอมรับคำตอบจริง ๆ ผู้ใช้ที่มี 1 ตัวแทนมักจะถามและเรียกใช้ประเภทที่ออกจากทันทีที่พวกเขามีคำตอบที่คัดลอกได้วางเมื่อเร็ว ๆ นี้
Cerbrus

1
มีวิธีแก้ปัญหานี้บ้างไหม a.join(',').split(a[0]).length === a.length + 1
Jashwant

1
@ TomášZato: "OP" หมายถึง "โปสเตอร์ดั้งเดิม" (ผู้ที่ถามคำถาม)
TJ Crowder

คำตอบ:


289
const allEqual = arr => arr.every( v => v === arr[0] )
allEqual( [1,1,1,1] )  // true

หรือหนึ่งซับ:

[1,1,1,1].every( (val, i, arr) => val === arr[0] )   // true

Array.prototype.every (จาก MDN): every()วิธีทดสอบว่าองค์ประกอบทั้งหมดในอาร์เรย์ผ่านการทดสอบที่ใช้โดยฟังก์ชันที่มีให้หรือไม่


11
ความกะทัดรัดเป็นวิญญาณของปัญญา
svarog

1
ผมได้สร้างกรณี jsperf วิธีนี้มีประสิทธิภาพดีกว่าผู้สมัครส่วนใหญ่
Junliang Huang

1
const everythings_equal = array => array.every(thing => thing === array[0]);
КонстантинВан

8
ใช้someแทนevery: arr.some( v => v !== arr[0] ). arr[0]นี้จะกลับต้นเมื่อองค์ประกอบแรกพบเป็นไปไม่เท่ากัน
ม.ค.

2
@Jan everyก็กลับมาก่อนเช่นกัน
golopot

111

แก้ไข:เป็นนินจาแดง:

!!array.reduce(function(a, b){ return (a === b) ? a : NaN; });

ผล:

var array = ["a", "a", "a"] => result: "true"
var array = ["a", "b", "a"] => result: "false"
var array = ["false", ""] => result: "false"
var array = ["false", false] => result: "false"
var array = ["false", "false"] => result: "true"
var array = [NaN, NaN] => result: "false" 

คำเตือน:

var array = [] => result: TypeError thrown

นี้เป็นเพราะเราไม่ได้ผ่านการinitialValue ดังนั้นคุณอาจต้องการตรวจสอบarray.lengthก่อน


5
อาจจะสายไปปาร์ตี้ ... ฉันคิดว่ามันจะไม่ทำงานถ้าชุดของคุณทำมาจากfalse! ตัวอย่างเช่นลอง [false, false, false] .reduce (ฟังก์ชั่น (a, b) {return (a === b)? a: false;});
George Flourentzos

3
@Martin: ["false", ""]ส่งคืนtrue: /
dalgard

6
NaNนี้สามารถนำขึ้นรอยโดยใช้ เนื่องจากทั้งคู่NaN === NaNและNaN !== NaNเป็นเท็จจึงรับประกันได้ว่าเมื่อprevตั้งค่าเป็น NaN แล้วไม่มีค่าใดสามารถนำออกมาได้ นอกจากนี้ยังเพิ่มในการปฏิเสธคู่แปลงผลลัพธ์ไปtrueและfalseเนื่องจากNaNเป็นเท็จ รูปแบบสุดท้าย:!!array.reduce(function(a, b){ return (a === b) ? a : NaN; });
Filipe Silva

3
ลดลง เกิดอะไรขึ้นถ้าองค์ประกอบเท่ากัน แต่เป็นเท็จ ?
КонстантинВан

3
ฉันลงคะแนนเพราะสิ่งนี้ไม่สามารถใช้ได้กับค่าบูลีน
Tyguy7

62

วิธีนี้ใช้ได้ผล คุณสร้างวิธีการบนอาร์เรย์โดยใช้แบบตัวอย่าง

if (Array.prototype.allValuesSame === undefined) {
  Array.prototype.allValuesSame = function() {
    for (let i = 1; i < this.length; i++) {
      if (this[i] !== this[0]) {
        return false;
      }
    }
    return true;
  }
}

เรียกสิ่งนี้ด้วยวิธีนี้:

let a = ['a', 'a', 'a'];
let b = a.allValuesSame(); // true
a = ['a', 'b', 'a'];
b = a.allValuesSame();     // false

5
ดีมาก แต่ระวัง: IE ไม่สนับสนุนวิธีการกำหนดต้นแบบนี้ ฉันจะใช้มันต่อไป
Tomáš Zato - Reinstate Monica

5
@ TomášZato: IE รองรับการArray.prototypeปรับเพียงเล็กน้อย (แม้แต่ IE6) เป็นเพียงต้นแบบองค์ประกอบ DOM ที่ IE เวอร์ชันเก่าบางรุ่นไม่สนับสนุนการเพิ่ม
TJ Crowder

4
ฉันไม่คิดว่ามันเป็นความคิดที่ดีที่จะทำการลิงต้นแบบในตัว หากมีหลายไลบรารีทำสิ่งนี้อาจนำไปสู่พฤติกรรมที่ไม่คาดคิดซึ่งยากต่อการดีบัก
Mark Wilbur

1
@ MarkWilbur +1 โดยเฉพาะอย่างยิ่งถ้าคุณทำเพื่อ ... ในการวนรอบอาร์เรย์ต่อไปคุณจะได้รับallValuesSameในวง
Olivier Pons

1
ฉันไปข้างหน้าและปรับปรุงสิ่งนี้ให้ทันสมัยโดยไม่เปลี่ยนแปลงเจตนา
นาย Polywhirl

30

ใน JavaScript 1.6 คุณสามารถใช้Array.every:

function AllTheSame(array) {
    var first = array[0];
    return array.every(function(element) {
        return element === first;
    });
}

คุณอาจต้องมีการตรวจสติอย่างเช่นเมื่ออาร์เรย์ไม่มีองค์ประกอบ (นอกจากนี้จะไม่ทำงานเมื่อองค์ประกอบทั้งหมดที่มีNaNมาตั้งแต่NaN !== NaNแต่ที่ไม่ควรจะเป็นปัญหา ... ใช่ไหม?)


30

คุณสามารถเปลี่ยน Array เป็นชุด ถ้าขนาดของ Set เท่ากับ 1 ดังนั้นองค์ประกอบทั้งหมดของ Array จะเท่ากัน

function allEqual(arr) {
  return new Set(arr).size == 1;
}

allEqual(['a', 'a', 'a', 'a']); // true
allEqual(['a', 'a', 'b', 'a']); // false

สุกใส เพียงแค่ทราบว่าallEqual([NaN, NaN])ให้trueในกรณีนี้
КонстантинВан

12

และสำหรับการเปรียบเทียบประสิทธิภาพฉันยังทำมาตรฐาน:

function allAreEqual(array){
    if(!array.length) return true;
    // I also made sure it works with [false, false] array
    return array.reduce(function(a, b){return (a === b)?a:(!b);}) === array[0];
}
function same(a) {
    if (!a.length) return true;
    return !a.filter(function (e) {
        return e !== a[0];
    }).length;
}

function allTheSame(array) {
    var first = array[0];
    return array.every(function(element) {
        return element === first;
    });
}

function useSome(array){
    return !array.some(function(value, index, array){
        return value !== array[0];
    });
}

ผล:

allAreEqual x 47,565 ops/sec ±0.16% (100 runs sampled)
same x 42,529 ops/sec ±1.74% (92 runs sampled)
allTheSame x 66,437 ops/sec ±0.45% (102 runs sampled)
useSome x 70,102 ops/sec ±0.27% (100 runs sampled)

ดังนั้นจึงเห็นได้ชัดว่าการใช้ builtin array.some () เป็นวิธีที่เร็วที่สุดในการสุ่มตัวอย่าง


3
เป็นความคิดที่ดีที่จะตรวจสอบว่ามีอะไรเพิ่มเติมที่นี่ สาเหตุที่ทำให้Array#someบางครั้งมีประสิทธิภาพสูงกว่าก็คือเมื่อฟังก์ชั่นการโทรกลับส่งกลับจริงมันหยุดซ้ำ Array#everyดังนั้นถ้าองค์ประกอบทั้งหมดที่อยู่ในความเป็นจริงเท่ากับการทำงานที่ควรจะเหมือนกับ และประสิทธิภาพสัมพัทธ์เมื่อองค์ประกอบทั้งหมดไม่เท่ากันจะแตกต่างกันไปตามดัชนีขององค์ประกอบที่ไม่ตรงกันแรก
danmactough

3
ทำได้ดีนี่. คุณสามารถตั้งชื่อแต่ละคนด้วยฟังก์ชั่นที่ใช้ lol เช่นลด, กรอง, บางคน
Z. Khullah

ที่พื้นเมืองของการวนรอบฉันเดิมพันที่ดีกว่าสิ่งเหล่านี้โดยปัจจัย 5
PirateApp

9

คำตอบที่สั้นที่สุดโดยใช้ขีดล่าง / Lodash

function elementsEqual(arr) {
    return !_.without(arr, arr[0]).length
}

ข้อมูลจำเพาะ:

elementsEqual(null) // throws error
elementsEqual([]) // true
elementsEqual({}) // true
elementsEqual([1]) // true
elementsEqual([1,2]) // false
elementsEqual(NaN) // true

แก้ไข:

หรือสั้นกว่านั้นก็ได้รับแรงบันดาลใจจากคำตอบของทอม:

function elementsEqual2(arr) {
    return _.uniq(arr).length <= 1;
}

ข้อมูลจำเพาะ:

elementsEqual2(null) // true (beware, it's different than above)
elementsEqual2([]) // true
elementsEqual2({}) // true
elementsEqual2([1]) // true
elementsEqual2([1,2]) // false
elementsEqual2(NaN) // true

6

หากคุณใช้underscore.js อยู่แล้วนี่เป็นอีกตัวเลือกโดยใช้_.uniq:

function allEqual(arr) {
    return _.uniq(arr).length === 1;
}

_.uniqส่งกลับอาร์เรย์รุ่นที่ซ้ำกันฟรี หากค่าทั้งหมดเท่ากันความยาวจะเป็น 1

ดังที่ได้กล่าวไว้ในความคิดเห็นเนื่องจากคุณอาจคาดหวังว่าอาร์เรย์ที่ว่างเปล่าจะกลับมาtrueจากนั้นคุณควรตรวจสอบกรณีดังกล่าว:

function allEqual(arr) {
    return arr.length === 0 || _.uniq(arr).length === 1;
}

falseแต่ถ้าอาร์เรย์ว่างเปล่าคำตอบของคุณจะกลับมา trueในขณะที่ผมคิดว่ามันควรจะเป็น การเปลี่ยนไปใช้.length <= 1จะเพียงพอแล้ว
ค่าเฉลี่ย Joe

@ Kasztan นั่นเป็นจุดยุติธรรม ฉันได้อัปเดตคำตอบเพื่อให้ครอบคลุมกรณีดังกล่าวแล้ว
Tom Fenech

6

ใช่คุณสามารถตรวจสอบได้โดยใช้ตัวกรองดังต่อไปนี้ง่ายมากตรวจสอบทุกค่าเหมือนกันกับค่าแรก:

//ES6
function sameValues(arr) {
  return arr.filter((v,i,a)=>v===a[0]).length === arr.length;
} 

ยังสามารถทำได้โดยใช้ทุกวิธีในอาร์เรย์:

//ES6
function sameValues(arr) {
  return arr.every((v,i,a)=>v===a[0]);
} 

และคุณสามารถตรวจสอบอาร์เรย์ของคุณเช่นด้านล่าง:

sameValues(['a', 'a', 'a', 'a']); // true
sameValues(['a', 'a', 'b', 'a']); // false

หรือคุณสามารถเพิ่มไปยังฟังก์ชัน Array ดั้งเดิมใน JavaScript ได้หากคุณนำมาใช้ซ้ำมาก

//ES6
Array.prototype.sameValues = Array.prototype.sameValues || function(){
 this.every((v,i,a)=>v===a[0]);
}

และคุณสามารถตรวจสอบอาร์เรย์ของคุณเช่นด้านล่าง:

['a', 'a', 'a', 'a'].sameValues(); // true
['a', 'a', 'b', 'a'].sameValues(); // false

5

คุณสามารถใช้Array.everyหากได้รับการสนับสนุน:

var equals = array.every(function(value, index, array){
    return value === array[0];
});

วิธีการทางเลือกของการวนรอบอาจเป็นสิ่งที่ต้องการ sort

var temp = array.slice(0).sort();
var equals = temp[0] === temp[temp.length - 1];

หรือถ้ารายการนั้นเป็นเหมือนคำถามก็มีบางอย่างที่สกปรกเช่น:

var equals = array.join('').split(array[0]).join('').length === 0;

ยังใช้งานได้


คุณมีตัวอย่างแรกย้อนหลัง equals = !array.some( (v,i,a) => v!==a[0] )ควรจะเป็น มิฉะนั้นคุณเพียงแค่การตรวจสอบว่าค่าใด ๆ เท่ากับครั้งแรกซึ่งจะแน่นอนเสมอจะเป็นจริง :)
มาร์คคาห์น

ไม่อย่างแน่นอนฉันใช้someแทนeveryดังที่กล่าวไว้ในย่อหน้าแรก :) ขอบคุณสำหรับการจับ!
ZER0

5

คุณสามารถรับหนึ่งซับเพื่อทำสิ่งที่คุณต้องการโดยใช้ฟังก์ชั่นArray.prototype.every , Object.isและ ES6:

const all = arr => arr.every(x => Object.is(arr[0], x));

2
โปรดอธิบายวิธีแก้ปัญหาที่คุณเสนอ
il_raffa

3

ฉันคิดว่าวิธีที่ง่ายที่สุดในการทำเช่นนี้คือการสร้างลูปเพื่อเปรียบเทียบแต่ละค่ากับถัดไป ตราบใดที่มีการแบ่งใน "โซ่" แล้วมันจะกลับเท็จ หากครั้งแรกเท่ากับที่สองที่สองเท่ากับที่สามและอื่น ๆ แล้วเราสามารถสรุปได้ว่าองค์ประกอบทั้งหมดของอาร์เรย์จะมีค่าเท่ากัน

รับข้อมูลอาร์เรย์ [] จากนั้นคุณสามารถใช้:

for(x=0;x<data.length - 1;x++){
    if (data[x] != data[x+1]){
        isEqual = false;            
    }
}
alert("All elements are equal is " + isEqual);


3

อัปเดตโซลูชันใหม่: ตรวจสอบดัชนี

 let a = ['a', 'a', 'b', 'a'];
 let a = ['a', 'a', 'a', 'a'];
 let check = (list) => list.every(item => list.indexOf(item) === 0);
 check(a); // false;
 check(b); // true;

อัปเดตด้วย ES6: การใช้list.everyเป็นวิธีที่เร็วที่สุด:

 let a = ['a', 'a', 'b', 'a'];
 let check = (list) => list.every(item => item === list[0]);

เวอร์ชั่นเก่า:

      var listTrue = ['a', 'a', 'a', 'a'];
      var listFalse = ['a', 'a', 'a', 'ab'];

      function areWeTheSame(list) { 
         var sample = list[0];
         return (list.every((item) => item === sample));
      }

2

คุณสามารถใช้สิ่งนี้:

function same(a) {
    if (!a.length) return true;
    return !a.filter(function (e) {
        return e !== a[0];
    }).length;
}

ฟังก์ชันจะตรวจสอบก่อนว่าอาเรย์นั้นว่างหรือไม่ หากเป็นค่าจะเท่ากับ .. มิฉะนั้นจะกรองอาร์เรย์และใช้องค์ประกอบทั้งหมดที่แตกต่างจากอาร์เรย์แรก หากไม่มีค่าดังกล่าว => อาร์เรย์จะมีองค์ประกอบเท่ากันมิฉะนั้นจะไม่มี


1

_.isEqual(object, other)ฟังก์ชันของขีดล่างดูเหมือนจะทำงานได้ดีสำหรับอาร์เรย์ ลำดับของรายการในอาร์เรย์มีความสำคัญเมื่อตรวจสอบความเท่าเทียมกัน ดูhttp://underscorejs.org/#isEqual


1
var listTrue = ['a', 'a', 'a', 'a'];
var listFalse = ['a', 'a', 'a', 'ab'];

function areWeTheSame(list) { 
    var sample = list[0];
    return !(list.some(function(item) {
        return !(item == sample);
    }));
}

โปรดอธิบายสิ่งที่คุณทำแทนการวางโค้ดบางส่วน
Wouter J

1

มันง่าย สร้างฟังก์ชั่นและส่งผ่านพารามิเตอร์ ในฟังก์ชั่นนั้นคัดลอกดัชนีแรกลงในตัวแปรใหม่ จากนั้นสร้างห่วงสำหรับและห่วงผ่านอาร์เรย์ ภายในลูปสร้างลูป while พร้อมเงื่อนไขการตรวจสอบว่าตัวแปรที่สร้างขึ้นใหม่นั้นมีค่าเท่ากับองค์ประกอบทั้งหมดในลูปหรือไม่ ถ้าผลตอบแทนเท่ากันเป็นจริงหลังจาก for for loop เสร็จสมบูรณ์มิฉะนั้นจะส่งคืน false ภายใน while loop

function isUniform(arra){
    var k=arra[0];
    for (var i = 0; i < arra.length; i++) {
        while(k!==arra[i]){
            return false;
        }
    }
    return true;
}

1

ตอบรับการทำงานที่ดี แต่ฉันต้องการที่จะเพิ่มเล็กน้อย มันไม่ได้ผลสำหรับฉันที่จะใช้===เพราะฉันกำลังเปรียบเทียบอาร์เรย์ของออบเจ็กต์อาร์เรย์อย่างไรก็ตามในแอพของฉันฉันใช้แพ็คเกจที่มีความลึกเท่ากันซึ่งฉันขอแนะนำ ด้วยรหัสของฉันดูเหมือนว่านี้:

let areAllEqual = arrs.every((val, i, arr) => equal(val, arr[0]) );

และข้อมูลของฉันมีลักษณะเช่นนี้:

[  
  [
    {
      "ID": 28,
      "AuthorID": 121,
      "VisitTypeID": 2
    },
    {
      "ID": 115,
      "AuthorID": 121,
      "VisitTypeID": 1
    },
    {
      "ID": 121,
      "AuthorID": 121,
      "VisitTypeID": 1
    }
  ],
  [
    {
      "ID": 121,
      "AuthorID": 121,
      "VisitTypeID": 1
    }
  ],
  [
    {
      "ID": 5,
      "AuthorID": 121,
      "VisitTypeID": 1
    },
    {
      "ID": 121,
      "AuthorID": 121,
      "VisitTypeID": 1
    }
  ]
]

1
  1. สร้างสตริงโดยการเข้าร่วมอาร์เรย์
  2. สร้างสตริงโดยการทำซ้ำอักขระแรกของอาร์เรย์ที่กำหนด
  3. จับคู่ทั้งสองสตริง

	function checkArray(array){
		return array.join("") == array[0].repeat(array.length);	
	}

	console.log('array: [a,a,a,a]: ' + checkArray(['a', 'a', 'a', 'a']));
	console.log('array: [a,a,b,a]: ' + checkArray(['a', 'a', 'b', 'a']));

และคุณก็ทำ!


1

ตอนนี้คุณสามารถใช้ประโยชน์จากชุดที่จะทำอย่างง่ายดาย

let a= ['a', 'a', 'a', 'a']; // true
let b =['a', 'a', 'b', 'a'];// false

console.log(new Set(a).size === 1);
console.log(new Set(b).size === 1);



0

นี่มันไม่ซับซ้อนจริงๆ ฉันสงสัยอย่างมากว่าคุณไม่ได้ลอง สิ่งที่คุณทำคือคุณเลือกค่าแรกบันทึกในตัวแปรจากนั้นภายในforลูปให้เปรียบเทียบค่าที่ตามมาทั้งหมดกับค่าแรก
ฉันตั้งใจจะไม่แชร์รหัสใด ๆ ค้นหาวิธีการforใช้งานและวิธีเปรียบเทียบตัวแปร


8
ฉันไม่ชอบคำตอบนี้ มันจะไม่บอกให้คุณรู้ว่าค่าที่สองนั้นเหมือนกันกับค่าที่สามหรือไม่เป็นต้นว่าลูปที่ซ้อนกันอย่างเห็นได้ชัดจะทำเช่นนั้น
jtromans

3
@ jtromans: เพราะสมบัติสกรรมกริยาของความเสมอภาคถ้า A == B และ A == C ดังนั้นเราจึงรู้ B == C; คุณไม่จำเป็นต้องตรวจสอบว่า "ด้วยตนเอง" กับวนซ้ำซ้อนการเปรียบเทียบการทำซ้ำกับค่าเดียว (ค่าแรกในอาร์เรย์ไม่ใช่ค่าที่กำหนดเอง :) เป็นสิ่งที่คำตอบนี้แนะนำและคำตอบที่ยอมรับจึงเป็นเช่นนั้น
OV

@ov แน่นอนในความเร่งรีบของฉันฉันเข้าใจผิดคำถามซึ่งฉันคิดว่าในเวลาที่ต้องการมากกว่าเพียงแค่ตรวจสอบว่าค่าทั้งหมดมีค่าเท่ากัน (! duh)
jtromans

9
มันไม่ซับซ้อน และไม่มีคำตอบอื่น ๆ ในหน้านี้ แต่สำหรับฉันคำตอบนี้มีประโยชน์น้อยที่สุด
Charlie

1
เดิมทีมันหมายถึงการสร้างจุดแข็งต่อการยืนยัน OP เขาพยายามคิดก่อนถามคำถาม
Tomáš Zato - Reinstate Monica

0

Simple one line solution เพียงเปรียบเทียบกับ array ที่เต็มไปด้วยรายการแรก

if(arr.join('') === Array(arr.length).fill(arr[0]).join(''))

ดูเหมือนจะไม่เป็นทางออกที่สามารถใช้งานได้ทุกที่
Lu4

มันค่อนข้างใกล้กับตกลง ดีกว่าจะเป็นเช่น: function arrayOfSame (arr) {return (arr.join ('') == (Array ใหม่ (arr.length + 1) .join (arr [0]))); }
Arkain

0

อีกวิธีที่น่าสนใจเมื่อคุณใช้ไวยากรณ์ฟังก์ชั่นลูกศร ES6:

x = ['a', 'a', 'a', 'a']
!x.filter(e=>e!==x[0])[0]  // true

x = ['a', 'a', 'b', 'a']
!x.filter(e=>e!==x[0])[0] // false

x = []
!x.filter(e=>e!==x[0])[0]  // true

และเมื่อคุณไม่ต้องการใช้ตัวแปรสำหรับ array (x) อีกครั้ง:

!['a', 'a', 'a', 'a'].filter((e,i,a)=>e!==a[0])[0]    // true

IMO ผู้โพสต์ก่อนหน้านี้ที่ใช้ array.every (... ) มีทางออกที่สะอาดที่สุด


0
function isUniform(array) {   
  for (var i=1; i< array.length; i++) {
    if (array[i] !== array[0]) { return false; }
  }

  for (var i=1; i< array.length; i++) {
    if (array[i] === array[0]) { return true; }
  }
}
  • สำหรับวงแรก เมื่อใดก็ตามที่ตรวจพบไม่สม่ำเสมอจะส่งกลับ "false"
  • การวนซ้ำครั้งแรกจะทำงานและถ้ามันคืนค่าเท็จเรามี "false"
  • เมื่อมันไม่ได้คืนค่าเท็จมันหมายความว่าจะมีจริงดังนั้นเราจึงวนรอบที่สอง และแน่นอนว่าเราจะมี "ความจริง" จากลูปที่สอง (เพราะลูปแรกพบว่ามันไม่ผิด)

0

สิ่งนี้อาจใช้งานได้คุณสามารถใช้รหัสความคิดเห็นออกเช่นกันซึ่งยังทำงานได้ดีกับฉากที่กำหนด

function isUniform(){
	var arrayToMatch = [1,1,1,1,1];
	var temp = arrayToMatch[0];
	console.log(temp);
  /* return arrayToMatch.every(function(check){
    return check == temp;
   });*/
var bool;
   arrayToMatch.forEach(function(check){
    bool=(check == temp);
   })
  console.log(bool);
}
isUniform();


0

อีกวิธีด้วยขนาดที่คั่นและรายการที่จัดระเบียบ:

array1 = [1,2,3]; array2 = [1,2,3];

function isEqual(){

    return array1.toString()==array2.toString();
}

0

คุณสามารถแปลงอาร์เรย์เป็นชุดและตรวจสอบขนาดของมัน

ในกรณีของรายการอาร์เรย์ดั้งเดิมเช่นnumber, string:

const isArrayWithEqualEntries = array => new Set(array).size === 1

ในกรณีที่อาเรย์ของวัตถุที่มีบางฟิลด์ที่จะทดสอบเพื่อความเท่าเทียมให้พูดว่าid:

const mapper = ({id}) => id
const isArrayWithEqualEntries = array => new Set(array.map(mapper)).size === 1

-4

ใน PHP มีวิธีแก้ปัญหาที่ง่ายมากวิธีหนึ่งคือ

(นับ (array_count_values ​​($ array)) == 1)

ตัวอย่างเช่น :

$arr1 = ['a', 'a', 'a', 'a'];
$arr2 = ['a', 'a', 'b', 'a'];


print (count(array_count_values($arr1)) == 1 ? "identical" : "not identical"); // identical
print (count(array_count_values($arr2)) == 1 ? "identical" : "not identical"); // not identical

นั่นคือทั้งหมดที่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.