Смущает поведение `map` для массивов, созданных с помощью` new` [duplicate]

Если вы хотите сделать это программно, это можно сделать следующим образом:

Objective-C

UIBarButtonItem *backItem = [[UIBarButtonItem alloc] initWithTitle:@"Custom"
                                                             style:UIBarButtonItemStyleBordered
                                                            target:nil
                                                            action:nil];

[self.navigationItem setBackBarButtonItem:backItem];

Swift

let backItem = UIBarButtonItem(title: "Custom", style: .Bordered, target: nil, action: nil)
navigationItem.backBarButtonItem = backItem

Однако , если вы предпочитаете использовать Interface Builder, просто выберите UINavigationItem, для которого вы хотите установить обратную кнопку, и перейдите к инспектору атрибутов, чтобы изменить заголовок кнопки.

enter image description here [/g2]

ПРИМЕЧАНИЕ. Важно помнить, что вы должны настроить это на контроллере представления, к которому вы бы возвращались, нажав кнопку «Назад», а не на текущий вид контроллера.

16
задан Matt Fenwick 27 July 2012 в 15:01
поделиться

2 ответа

Когда вы создаете массив следующим образом:

var arr1 = new Array( 4 );

вы получаете массив, который имеет длину 4, но в котором нет элементов . Вот почему map не преобразует массив - в массиве нет элементов для преобразования.

С другой стороны, если вы сделаете:

var arr2 = [ undefined, undefined, undefined, undefined ];

вы получите и массив, который также имеет длину 4, но у действительно есть 4 элемента.

Обратите внимание на разницу между отсутствием элементов и наличием элементов со значениями undefined. К сожалению, выражение доступа к свойству в обоих случаях будет иметь значение undefined, поэтому:

arr1[0] // undefined
arr2[0] // undefined

Однако существует способ дифференцировать эти два массива:

'0' in arr1 // false
'0' in arr2 // true
13
ответ дан Šime Vidas 27 July 2012 в 15:01
поделиться

Еще один ответ о поведении console.log. Проще говоря, на выходе получается сахара и технически неправильно .

Давайте рассмотрим этот пример:

var foo = new Array(4),
    bar = [undefined, undefined, undefined, undefined];

console.log( Object.getOwnPropertyNames(bar) );
console.log( Object.getOwnPropertyNames(foo) );

Как мы видим из результата, функция .getOwnPropertyNames возвращает

["length"]

для foo Array / Object, но

["length", "0", "1", "2", "3"]

для bar Массив / Объект.

Итак, console.log просто дурачит вас при выводе Arrays, у которого просто есть определенный .length, но нет присвоений реального свойства.

1
ответ дан jAndy 27 July 2012 в 15:01
поделиться
Другие вопросы по тегам:

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