Показать полную графическую версию : JS, копирование массива
я столкнулся с проблемой: у меня массив присваивается ссылкой, а не копированием.
копируем строчку:
var str1 = "123123123";
var str2 = new String(str1);
можно ли так же (не перебирая содержимое) скопировать массив?
var arr1 = new Array();
arr1["a"] = "a1";
arr1["b"] = "b1";
var arr2 = ... // делаем это
arr2["c"] = "c1";
// чтобы arr1 и arr2 различались
У вас какой-то слишком формальный подход к кодингу на JS. Первый вариант работает проще:
str1 = "123123123";
str2 = str1;
Впрочем, дело ваше.
Для второго есть такой способ:
arr1 = [1, 3, 5, 7]; // создаём массив
arr2 = [].concat(arr1); // создаём второй пустой и копируем в него первый
arr2[4] = 88; // добавляем значение во второй
alert(arr2[4] + " | " + arr1[4]); // здесь выйдет "88 | undefined"
str2 = str1; »
как тогда передать строку по ссылке? (иногда надо)
function print(a)
{
var s = "";
for(i in a) s += i + ": " + a[i] + "\n";
WScript.Echo(s);
}
var a = {a:"a1", b:"b1"};
var b = [].concat(a);
a["c"] = "c1";
print(a);
print(b);
Не даёт нужного эффекта. Он взял и прицепил весь массив a одним элементом b. А мне надо сделать копию ассоциативного массива и добавить ему ассоциативный элемент
Конечно не даст. a - это у вас объект, а для b вы используете создание массива []. Хотя, конечно, удивительно, что после всего этого a["c"] = "c1" работает.
Ну и WScript.Echo(s) - это уже не JavaScript. Мы точно о нём ведём речь?
это уже не JavaScript »
Точно о нём. Можно тот же код завернуть в HTA и выводить текст alert(). Движок виндовый wscript
pva, точно не о нём. «javascript» и «jscript» — это два разных языка. javascript не работает в WSH. jscript не работает нигде, кроме WSH и IE.
тогда это вопрос по JScript
Iska, Coutty, да ладно вам пургу гнать: и JavaScript, и JScript, и ActionScript, и QtScript — это один язык ECMAScript, стандарт ISO/IEC 16262.
Busla, ну конечно, только названием различаются...
Правильнее сказать - производные от ECMAScript.
pva, я не знаю, как передавать по ссылке и по значению, поэтому и не готов ответить. Мне это никогда не пригождалось и я просто не представляю зачем это надо. Хватало глобальных и локальных переменных.
Busla, с двумя последними не знаком (тут Вам карты в руки), но JavaScript и JScript — это разные языки. Не нравится название разные языки, давайте назовём иначе — разные диалекты одного языка, как выше сказал Coutty. Стандарт есть стандарт, однако, когда в один язык вводят некоторые расширения, не описываемые стандартом и никак не поддерживаемые другим языком — к чему сие приводит?
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.