Не срабатывает проверка наличия слова в массиве

Статус
Закрыто для дальнейших ответов.

Сергий Задонский

Участник
Топикстартер
Сообщения
251
Реакции
4
Код:
myDoc = app.activeDocument;
myArr = []; // массив для сбора найденных слов
app.changeGrepPreferences = app.findGrepPreferences = NothingEnum.nothing;

app.findGrepPreferences.findWhat = "a";
myFoundItems = myDoc.findGrep();

    if(myFoundItems.length != 0)
    {
        for (var i=0; i<myFoundItems.length; i++)
        {
                myFoundItem = myFoundItems[i];
                myWord = myFoundItem.words[0].contents
                myArr.push(myWord + '\r');
               
               if( i>0)
               if(myWord in myArr) alert("Элемент с ключём"+ myWord+ "присутствует в массиве");
               
          }
      }
Почему? *[[
 
Потому, что конструкция "myWord in myArr" не предусмотрена законодательством в отношении массивов.

Код:
Array.prototype.isElement = function (item) {

    for (var i = 0; i < this.length; i++) {
        if (this[i] == item) {
            return true;
        };
    };

    return false;

}

if (myArr.isElement(myWord))...
 
Только у Вас всё равно ничего найдено не будет, потому что Вы добавляете в массив объект с добавлением символа конца абзаца, а в массиве ищете объект без оного.
 
Потому, что конструкция "myWord in myArr" не предусмотрена законодательством в отношении массивов.
Хорошо, а почему тогда работает вот это:
Код:
var arr = [1,2,3,4,5,6,7,8,9];
if(3 in arr) alert("Элемент с ключём 3 присутствует в массиве");
if(!(15 in arr)) alert("Элемента с ключём 15 нет в массиве");
?
 
Потому, что конструкция "myWord in myArr" не предусмотрена законодательством в отношении массивов.

Код:
Array.prototype.isElement = function (item) {

    for (var i = 0; i < this.length; i++) {
        if (this[i] == item) {
            return true;
        };
    };

    return false;

}

if (myArr.isElement(myWord))...
Почему-то ругается в последней строке: "myArr.isElement(myWord) не является функцией" ?
 
Хорошо, а почему тогда работает вот это:
Код:
var arr = [1,2,3,4,5,6,7,8,9];
if(3 in arr) alert("Элемент с ключём 3 присутствует в массиве");
if(!(15 in arr)) alert("Элемента с ключём 15 нет в массиве");
?
Да, с числами работает, а со строками не хочет :(
 
Хорошо, а почему тогда работает вот это:
var arr = [1,2,3,4,5,6,7,8,9];
if(3 in arr) alert("Элемент с ключём 3 присутствует в массиве");
if(!(15 in arr)) alert("Элемента с ключём 15 нет в массиве");
?
Замените в массиве "3" на "15" и посмотрите результат.
 
Потому, что конструкция "myWord in myArr" не предусмотрена законодательством в отношении массивов.

Код:
Array.prototype.isElement = function (item) {

    for (var i = 0; i < this.length; i++) {
        if (this[i] == item) {
            return true;
        };
    };

    return false;

}

if (myArr.isElement(myWord))...
Простите, я не понимаю, как это должно работать. В объектной модели у Array я не нашел ни prototype ни isElement ... Хотя бы коротенько, поясните, что делает этот код, или дайте ссылку, где можно об этом прочитать? Пожалуйста.
 
В объектной модели у Array я не нашел ни prototype ни isElement ... Хотя бы коротенько, поясните, что делает этот код, или дайте ссылку, где можно об этом прочитать?
Описание можно найти в любом учебнике по JavaScript.
Через ссылку на свойство prototype объявляется метод isElement. Этот метод будет доступен для всех объектов типа Array в скрипте.
 

Не по теме:
Элемент с ключём
@Сергий Задонский, скажите, а вы слово «девчонки» тоже будете через «ё» писать?
grammar-nazi.png
:)

 
Последнее редактирование:
Описание можно найти в любом учебнике по JavaScript.
Через ссылку на свойство prototype объявляется метод isElement. Этот метод будет доступен для всех объектов типа Array в скрипте.
Хорошо. И все-таки, почему в примере:
Код:
myDoc = app.activeDocument;
myArr = []; // массив для сбора найденных слов
app.changeGrepPreferences = app.findGrepPreferences = NothingEnum.nothing;

app.findGrepPreferences.findWhat = "a";
myFoundItems = myDoc.findGrep();

    if(myFoundItems.length != 0)
    {
        for (var i=0; i<myFoundItems.length; i++)
        {
                myFoundItem = myFoundItems[i];
                myWord = myFoundItem.words[0].contents
                myArr.push(myWord + '\r');
               
               if( i>0)
               Array.prototype.isElement = function (item) {

    for (var i = 0; i < this.length; i++) {
        if (this[i] == item) {
            return true;
        };
    };

    return false;

}

if (myArr.isElement(myWord)) alert("Элемент с ключём"+ myWord+ "присутствует в массиве");
               
          }
      }
выдает ошибку?
 
И все-таки, почему в примере выдает ошибку?
Потому, что область видимости.

Код:
Array.prototype.isElement = function (item) {
    for (var i = 0; i < this.length; i++) {
        if (this[i] == item) {
            return true;
        };
    };
    return false;
}

myDoc = app.activeDocument;
myArr = []; // массив для сбора найденных слов
app.changeGrepPreferences = app.findGrepPreferences = NothingEnum.nothing;

app.findGrepPreferences.findWhat = "a";
myFoundItems = myDoc.findGrep();

    if(myFoundItems.length != 0)
    {
        for (var i=0; i<myFoundItems.length; i++)
        {
                myFoundItem = myFoundItems[i];
                myWord = myFoundItem.words[0].contents
                myArr.push(myWord + '\r');

if (myArr.isElement(myWord)) alert("Элемент с ключём"+ myWord+ "присутствует в массиве");
              
          }
      }
 
Потому, что область видимости.

Код:
Array.prototype.isElement = function (item) {
    for (var i = 0; i < this.length; i++) {
        if (this[i] == item) {
            return true;
        };
    };
    return false;
}

myDoc = app.activeDocument;
myArr = []; // массив для сбора найденных слов
app.changeGrepPreferences = app.findGrepPreferences = NothingEnum.nothing;

app.findGrepPreferences.findWhat = "a";
myFoundItems = myDoc.findGrep();

    if(myFoundItems.length != 0)
    {
        for (var i=0; i<myFoundItems.length; i++)
        {
                myFoundItem = myFoundItems[i];
                myWord = myFoundItem.words[0].contents
                myArr.push(myWord + '\r');

if (myArr.isElement(myWord)) alert("Элемент с ключём"+ myWord+ "присутствует в массиве");
             
          }
      }
Ошибку выдавать перестал, но и алерт на повторный элемент не срабатывает :(
 
Так было уже: в массив идет "myWord + '\r'", а проверяется "myWord";
Хорошо. В массиве мне нужно расположить слова столбиком, т.к. я вывожу его в отдельный документ чтобы сделать словарь. Где мне в проверку вставить + '\r' , чтобы она срабатывала?
 
В массиве мне нужно расположить слова столбиком
Вы как себе это представляете: в массиве столбиком? Ну, физический смысл?
Где мне в проверку вставить + '\r' , чтобы она срабатывала?
Вообще не надо вставлять ничего. Есть метод join(), который объединяет элементы массива в строку. В данном случае нужно сделать:
Код:
myArr.join('\r');
 
Вы как себе это представляете: в массиве столбиком? Ну, физический смысл?
Ну да, глуповато звучит. Но я имел ввиду, что вывести мне нужно столбиком. Я убрал это '\r' и вроде бы заработало, но не совсем так, как надо. Проверка срабатывает на все слова, попадающие в массив, а мне нужно , чтобы срабатывала только на слова, попадающие повторно.
 
Статус
Закрыто для дальнейших ответов.