思いつく限りでいろんなパターンで実装してみました。
ご参考にしてください。
■for文を利用した実装
最初のtextの値を保持しておいて、for文を利用して1つずつ最初のtextと同じかどうか比較することで実装しています。
function IsAllSameText(data){
if (data.length==0) {
return true;
}
let returnValue = true;
const firstText = data[0]["text"];
for (var i = 1; i < data.length; i++) {
if (firstText != data[i]["text"]) {
returnValue = false;
break;
}
}
return returnValue;
}
■filterを利用した実装
filterを利用して最初のテキストと同じものを抜き出して、その配列のサイズともとのdataのサイズが同じかどうかで実装しています。
function IsAllSameText(data){
if (data.length==0) {
return true;
}
const firstText = data[0]["text"];
return data.filter(x => x["text"] == firstText).length == data.length;
}
filterを利用した個所では以下のような配列が返ってきています。
const data = [
{
"text": "apple",
"key": "value1"
},
{
"text": "banana",
"key": "value2"
},
{
"text": "apple",
"key": "value3"
}
]
const firstText = data[0]["text"];
console.log(data.filter(x => x["text"] == firstText))
// [ { text: 'apple', key: 'value1' }, { text: 'apple', key: 'value3' } ]
■setを利用した実装
mapを利用してtextの値のみの配列を作成して、setを利用して重複する値を削除することで実装しています。
function IsAllSameText(data){
if (data.length==0) {
return true;
}
const textList = data.map(x => x["text"]);
return (new Set(textList)).size == 1;
}
mapを利用している箇所、setを利用している箇所ではそれぞれ以下のような形になっています。
const data = [
{
"text": "apple",
"key": "value1"
},
{
"text": "banana",
"key": "value2"
},
{
"text": "apple",
"key": "value3"
}
]
const textList = data.map(x => x["text"]);
console.log(textList)
// [ 'apple', 'banana', 'apple' ]
console.log(new Set(textList))
// Set(2) { 'apple', 'banana' }
念のためdataのサイズが0の場合はtrueとしております。
適宜修正してご利用ください。
また、データが多くなってくる場合は計算量も考慮する必要が出てくると思います。
計算量は比較していないので、データが多くなってくる場合は計算量も考慮したうえで、どのやり方がいいか選んで実装してみてください。