Jquery проверить, если массив 2 использовать все значения массива 1 - PullRequest
0 голосов
/ 02 июля 2018

Я пытаюсь проверить, использует ли array1 все значения моего array2, если false возвращает сообщение об ошибке, но мой array1.length не равен array2.length, я ищу часы, чтобы узнать почему. Кто-нибудь может мне помочь? а если проблема не оттуда, кто-нибудь может сказать мне мою ошибку?

function controlUserInput(inputText, appLang) {
	const regex = /\$[^$]*\$/gm;
const str = $('#formulaire-preview-textarea').val();
let m;
	var array =  populateVariable(appLang);
	
while ((m = regex.exec(str)) !== null) {
    // This is necessary to avoid infinite loops with zero-width matches
    if (m.index === regex.lastIndex) {
        regex.lastIndex++;
    }
    // The result can be accessed through the `m`-variable.
    m.forEach((match, groupIndex) => {
        console.log(`Found match, group ${groupIndex}: ${match}`);
		var isEqual = match.length==array.length;
		// for (i=0; i<=array.length-1;i++){
			if(displayCpt == 4 && isEqual && Array.from(match).every(function(paramInMatch){
				return $.inArray(paramInMatch, array) != -1;	
			})){
				osapi.jive.core.container.sendNotification({
				"message": "Toutes les valeurs rentrées sont correctes",
				"severity": "success"
				});
			}else{
				osapi.jive.core.container.sendNotification({
				"message": "Vous n'avez pas utilisé toutes les valeurs",
				"severity": "error"
				});
			}	
		// }
	})
    };
}

1 Ответ

0 голосов
/ 02 июля 2018

Edit:

Когда вы пытаетесь перебрать все элементы m, единственная строка сохраняется в match, поэтому при попытке сравнить с array она терпит неудачу.

Вместо итерации по всем элементам m, решение будет:

if (
  m.length === array.length &&
  m.every(el => array.includes(el))
) {
  osapi.jive.core.container.sendNotification({
    message: 'Toutes les valeurs rentrées sont correctes',
    severity: 'success'
  });
} else {
  osapi.jive.core.container.sendNotification({
    message: "Vous n'avez pas utilisé toutes les valeurs",
    severity: 'error'
  });
}

Надеюсь, это поможет!

Оригинальный ответ

Если вы хотите проверить, используется ли каждый элемент массива в другом массиве, у вас может быть два подхода:

Arr2 является подмножеством Arr1

const arr1 = [1, 2, 3, 4, 5, 6];
const arr2 = [1, 2, 5, 6];

function isSubSet(subSet, wholeSet) {
  return subSet.every(el => wholeSet.includes(el));
}

console.log(isSubSet(arr2, arr1)); // returns true

Arr2 содержит все элементы Arr1

const arr1 = [1, 2, 3, 4, 5, 6];
const arr2 = [1, 2, 5, 6];
const arr3 = [1, 2, 5, 6, 3, 4];

function isWholeSet(subSet, wholeSet) {
  return (
    subSet.length === wholeSet.length &&
    subSet.every(el => wholeSet.includes(el))
  );
}

console.log(isWholeSet(arr2, arr1)); // returns false
console.log(isWholeSet(arr3, arr1)); // returns true
...