concat (в JavaScript) не работающий на ассоциативные массивы

EDIT:If Вам нужен доступ только к последней ошибке, и Вы не работаете в многопоточной среде.

можно возвратиться только истинный/ложный (или некоторый #define, если Вы работаете в C и не поддерживаете bool переменные), и имейте глобальный Ошибочный буфер, который будет содержать последнюю ошибку:

int getObjectSize(MYAPIHandle h, int* returnedSize);
MYAPI_ERROR LastError;
MYAPI_ERROR* getLastError() {return LastError;};
#define FUNC_SUCCESS 1
#define FUNC_FAIL 0

if(getObjectSize(h, &size) != FUNC_SUCCESS ) {
    MYAPI_ERROR* error = getLastError();
    // error handling
}
10
задан ctype.h 27 December 2012 в 00:08
поделиться

5 ответов

Вы не используете функциональность Array - просто Функциональность объекта . В JavaScript Object является ассоциативным массивом - вы используете Array для массивов, индексированных целыми числами. Если вы сделали

var firstArray =  new Array();
firstArray.push("sam");  
firstArray.push("kam");
var secArray =  new Array();
secArray.push("sam");    
secArray.push("kam");
var res = firstArray.concat(secArray);

, то concat будет работать должным образом.

Если вы действительно хотите объединить ассоциативные массивы, выполните:

20
ответ дан 3 December 2019 в 16:11
поделиться

Попробуйте это,

var firstArray = new Array("sam","kam");
var secArray = new Array("sam","kam");
var res = firstArray.concat(secArray);
3
ответ дан 3 December 2019 в 16:11
поделиться

В JavaScript нет ассоциативных массивов, у него есть хэши объектов. Вы создаете массив и присваиваете значения некоторым из его свойств, а не самому массиву.

Ваше объединение не будет работать, потому что значения являются свойствами объекта. Чтобы выполнить конкатенацию таким образом, как у вас есть, вам нужно объединить два объекта. YUI, jQuery и другие фреймворки JavaScript предоставляют полезные методы для этого.

1
ответ дан 3 December 2019 в 16:11
поделиться

Строго говоря, это вовсе не ассоциативные массивы: это массивы нулевой длины с дополнительными именованными свойствами. Назначение этих свойств работает, потому что массивы также являются объектами в JavaScript; но это не делает их ассоциативным массивом. Их лучше рассматривать как хэши.

Методы массивов, такие как concat , будут работать только с числовыми индексами элементов массивов, а не со свойствами объектов - даже если эти объекты являются массивами .

1
ответ дан 3 December 2019 в 16:11
поделиться

Массивы в JavaScript имеют только цифровые ключи. Только объекты могут иметь нечисловые свойства. Так что попробуйте вместо этого:

var firstArray = {};
firstArray.c1 = "sam";
firstArray.c2 = "kam";
var secArray =  {};
secArray.c3 = "sam";  
secArray.c4 = "kam";

for (var prop in secArray) {
    if (secArray.hasOwnProperty(prop)) {
        firstArray[prop] = secArray[prop];
    }
}
1
ответ дан 3 December 2019 в 16:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: