Как пополнить массив, объявленный внутри функции?

Статус
Закрыто для дальнейших ответов.
кады в нем мульон слов ???
Ненене! Давайте отделим мух от котлет
Если вы его объявите как "new Array" и будете радостно делать ему push, то он будет
An array with integer indexing
и в качестве словаря вы его использовать не сможете.
 
Ненене! Давайте отделим мух от котлет
Если вы его объявите как "new Array" и будете радостно делать ему push, то он будет

и в качестве словаря вы его использовать не сможете.
С радостью отделю... Задача - ПОПОЛНЕНИЕ СЛОВАРЯ ! Все остальное - мухи.
 
Если вы его объявите как "new Array" и будете радостно делать ему push, то он будет
и в качестве словаря вы его использовать не сможете.

Задача - ПОПОЛНЕНИЕ СЛОВАРЯ !
Значит, какой из этого вывод? Правильно - выбирайте из двух зол: или делать массив и пополнять его через push или делать словарь, что исключает возможность подобного пополнения.
 
выведите в текстовый файл результат работы этого скрипта, руками скопируйте в свою функцию
 
выведите в текстовый файл результат работы этого скрипта, руками скопируйте в свою функцию
Ага, и через несколько таких "операций" отсортированный в алфавитном порядке словарь превратится в невесть что, ведь, как я уже писал выше, несколько десятков слов ручками вгонять в мегасловарь на правильные места - задачка не для ленивых, потому "лентяи" и пишут скрипты :) Я уже разок так сделал, еще пару тройку раз и скрипт будет работать как старая черепаха.
 
Экий вы непонятливый, ну вам же объяснили, что третьего не дано: или мухи или котлеты. Push - это такая операция помещения в стек (что такое стек надеюсь знаете? тарелки кладут друг на друга примерно так) Соответственно годится она только для массива с числовыми индексами. Ну там первый элемент, второй, третий и т.д. А у вас какие индексы? правильно - строковые. Как вы себе мыслите динамическое помещение в такой массив элементов и их упорядочивание? Да никак - не упорядочиваются они и все, да и не массив это вовсе а словарь. Хотите упорядочивать - делайте массив из строк но тогда вы не сможете к этому массиву по строковому индексу доступ получать - только по числовому.
Я понятно излагаю?
 
Экий вы непонятливый, ну вам же объяснили, что третьего не дано: или мухи или котлеты. Push - это такая операция помещения в стек (что такое стек надеюсь знаете? тарелки кладут друг на друга примерно так) Соответственно годится она только для массива с числовыми индексами. Ну там первый элемент, второй, третий и т.д. А у вас какие индексы? правильно - строковые. Как вы себе мыслите динамическое помещение в такой массив элементов и их упорядочивание? Да никак - не упорядочиваются они и все, да и не массив это вовсе а словарь. Хотите упорядочивать - делайте массив из строк но тогда вы не сможете к этому массиву по строковому индексу доступ получать - только по числовому.
Я понятно излагаю?
Ну ладно, пробуем думать... если превратить словарь в строку (баальшущщую) и поработать с ней файнд/чендчем... а потом обратно в словарь ? Не прокатит?
 
в чем проблема, что список не отсортирован?
и в чем проблема его программно отсортировать, если очень надо? конвертнуть в массив, отсортировать, конвертнуть обратно в объект

и в любом случае - в объекте свойства порядка не имеют. так что если не руками добавлять, а программно - они все равно не будут по порядку.

я правда не понимаю и проблемы программно добавить, взять объект из этой функции вместо объявления нового, а дальше я уже написал как код поправить, потом сохранить этот объект в файл
 
  • Спасибо
Реакции: _MBK_
Ну если вы хотите совсем извращенных извращений, то сделайте массивом строк, как делаете, инициализируйте через push (только ради б-га объявите его все таки перед циклом! вы надеюсь поняли что это будет МАССИВ а не тот словарь, который вы используете внутри функции?) после чего упорядочите как хотите, слепите в одну текстовую строку и перекомпилируйте ее в новый массив через eval
Но хоть убейте, не пойму что вам это даст? После перекомпиляции в словарь упорядочивание пропадет, поймите же, в случае словаря упорядочивание вообще смысла не имеет, там же индексы не числовые! Там нет первого элемента, второго, третьего и т.д. - там пара "ключ-слово" и для того чтоб как то извернуться типа "какое слово соответствует первому ключу?" надо выдумать чтото кардинально новое, чем обычный словарь или массив
 
в чем проблема, что список не отсортирован?
и в чем проблема его программно отсортировать, если очень надо?
Дык, именно это и нада! Но я такой скрипт, наверно, не напишу. А встроенный в InDesign скрипт SortParagraphs более трех страниц не берет...:(
 
Дык, именно это и нада!

массив отсортировать - одна строчка = myArray.sort();
здесь нужно будет немного хитрее, возможно, чтоб выбрать ключ
Код:
myArray.sort(sortByKey);

function sortByKey(a,b)
{
return a.key-b.key;
}

объект в массив

var myArray = [];
for(var prop in obj)
{
myArray.push({key:prop,value:obj[prop]})
}

массив в объект

var myObj = {};
for(var i=0;i<myArray.length;i++)
{
myObj[myArray[i].key] = myArray[i].value;
}
 
только еще раз напомню - свойства объекта никак не упорядочены
 
массив отсортировать - одна строчка = myArray.sort();
здесь нужно будет немного хитрее, возможно, чтоб выбрать ключ
Код:
myArray.sort(sortByKey);

function sortByKey(a,b)
{
return a.key-b.key;
}

объект в массив

var myArray = [];
for(var prop in obj)
{
myArray.push({key:prop,value:obj[prop]})
}

массив в объект

var myObj = {};
for(var i=0;i<myArray.length;i++)
{
myObj[myArray[i].key] = myArray[i].value;
}
Попробую с этим разобраться...
 
только еще раз напомню - свойства объекта никак не упорядочены
Ну ладно, Бог с ним, с объектом и с пушем заодно. У меня к вечеру совсем мозги потекли - я не понимаю, почему вот это не работает:
Код:
myDoc = app.activeDocument;
var myTextFrame = myDoc.pages[0].textFrames[0];
//var accent={};
for (j=0; j <= myTextFrame.words.length-1; j++){
    var myWord = myTextFrame.words[j];
    myWord = myWord.contents.toLowerCase().replace(/\u00AD/, '');  
    myWord = myWord.replace(myWord, 'accent\[\''+myWord+'\'\]\=\'\*\';');
   // accent.push(myWord.toLowerCase());
  }
Пуш я закомментил, а почему в тексте слова реплейсом не меняются?
 
Пуш я закомментил, а почему в тексте слова реплейсом не меняются?
Лично я сломал себе мозг, но не смог понять, что именно вы хотите этим реплейсом поменять. Есть смутное предположение что вы хотите из "A" сделать
"accent['A']='*';" 'fp'
Но так это ж не реплейсом делается а простым суммированием строк
 
Лично я сломал себе мозг, но не смог понять, что именно вы хотите этим реплейсом поменять. Есть смутное предположение что вы хотите из "A" сделать
"accent['A']='*';" 'fp'
Именно это.
Но так это ж не реплейсом делается а простым суммированием строк
Ну я не знаю... покажите, как? Пожалста. И вопрос остается, почему в тексте ничего не меняется?
 
1) вместо замысловатой конструкции пишете accent[myWord] = '*';

2) потому что myWord уже не в тексте. во второй строчке вы в эту переменную загнали уже просто строковое значение. довольно странно, что вы не понимаете собственный код - как вы его пишете?
 
Ну я не знаю... покажите, как?
Не, он (вероятно) имел в виду другое:
MyWord="accent\[\'"+myWord+"\'\]\=\'\*\';'";
Так?
И вопрос остается, почему в тексте ничего не меняется?
Потому, что, то что вы написали - безумный индусский код. ;)
 
Что мешает хранить словарь в xml и вертеть его по желанию как угодно?

Не по теме:
Тут человек массив со словарем не различает, а ты его такими страшными вещами пугаешь '))'
 
Статус
Закрыто для дальнейших ответов.