Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   JS, копирование массива (http://forum.oszone.net/showthread.php?t=191521)

pva 17-11-2010 22:08 1545230

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 различались


Coutty 18-11-2010 05:28 1545394

У вас какой-то слишком формальный подход к кодингу на JS. Первый вариант работает проще:
Код:

str1 = "123123123";
str2 = str1;

Впрочем, дело ваше.

Для второго есть такой способ:
Код:

arr1 = [1, 3, 5, 7]; // создаём массив
arr2 = [].concat(arr1); // создаём второй пустой и копируем в него первый
arr2[4] = 88; // добавляем значение во второй
alert(arr2[4] + " | " + arr1[4]); // здесь выйдет "88 | undefined"


pva 18-11-2010 21:25 1545910

Цитата:

Цитата Coutty
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. А мне надо сделать копию ассоциативного массива и добавить ему ассоциативный элемент

Coutty 19-11-2010 06:30 1546133

Конечно не даст. a - это у вас объект, а для b вы используете создание массива []. Хотя, конечно, удивительно, что после всего этого a["c"] = "c1" работает.

Ну и WScript.Echo(s) - это уже не JavaScript. Мы точно о нём ведём речь?

pva 19-11-2010 21:34 1546733

Цитата:

Цитата Coutty
это уже не JavaScript »

Точно о нём. Можно тот же код завернуть в HTA и выводить текст alert(). Движок виндовый wscript

Iska 20-11-2010 05:18 1546914

pva, точно не о нём. «javascript» и «jscript» — это два разных языка. javascript не работает в WSH. jscript не работает нигде, кроме WSH и IE.

pva 20-11-2010 15:45 1547164

тогда это вопрос по JScript

Busla 21-11-2010 11:55 1547732

Iska, Coutty, да ладно вам пургу гнать: и JavaScript, и JScript, и ActionScript, и QtScript — это один язык ECMAScript, стандарт ISO/IEC 16262.

Coutty 21-11-2010 12:02 1547735

Busla, ну конечно, только названием различаются...
Правильнее сказать - производные от ECMAScript.

pva, я не знаю, как передавать по ссылке и по значению, поэтому и не готов ответить. Мне это никогда не пригождалось и я просто не представляю зачем это надо. Хватало глобальных и локальных переменных.

Iska 21-11-2010 20:16 1548068

Busla, с двумя последними не знаком (тут Вам карты в руки), но JavaScript и JScript — это разные языки. Не нравится название разные языки, давайте назовём иначе — разные диалекты одного языка, как выше сказал Coutty. Стандарт есть стандарт, однако, когда в один язык вводят некоторые расширения, не описываемые стандартом и никак не поддерживаемые другим языком — к чему сие приводит?


Время: 05:03.

Время: 05:03.
© OSzone.net 2001-