Чтобы изменить массив необязательных / необязательных строк
//Array of optional Strings
let array : [String?] = ["1",nil,"2","3","4"]
//Separator String
let separator = ","
//flatMap skips the nil values and then joined combines the non nil elements with the separator
let joinedString = array.flatMap{ $0 }.joined(separator: separator)
//Use Compact map in case of **Swift 4**
let joinedString = array.compactMap{ $0 }.joined(separator: separator
print(joinedString)
Здесь flatMap, compactMap пропускает значения nil в массиве и добавляет другие значения, чтобы создать объединенную строку.
Правильно, в javascript почти все является объектом. Но эти объекты немного отличаются от того, что мы видим на Java, C ++ или других традиционных языках. Объект в JS - это просто хэш-карта с парами ключ-значение. Ключ всегда является строкой, а значение может быть любым, включая строки, целые числа, логические значения, функции, другие объекты и т. Д. Поэтому я могу создать новый объект следующим образом:
var obj = {}; // this is not the only way to create an object in JS
и добавить новый ключ -значные пары в него:
obj['message'] = 'Hello'; // you can always attach new properties to an object externally
или
obj.message = 'Hello';
Точно так же, если я хочу добавить новую функцию к этому объекту:
obj['showMessage'] = function(){
alert(this['message']);
}
или
obj.showMessage = function() {
alert(this.message);
}
Теперь, когда я вызываю эту функцию, она покажет всплывающее сообщение с сообщением:
obj.showMessage();
Массивы - это просто те объекты, которые способны содержать списки значений:
var arr = [32, 33, 34, 35]; // one way of creating arrays in JS
Хотя вы всегда можете использовать любой объект для хранения значений, но массивы позволяют хранить их, не связывая ключ с каждым из них. Таким образом, вы можете получить доступ к элементу, используя его индекс:
alert(arr[1]); // this would show 33
Объект массива, как и любой другой объект в JS, имеет свои свойства, такие как:
alert(arr.length); // this would show 4
Для я подробно рекомендую Pro Javascript Techniques Джона Ресига .
Предложение «В JavaScript, ALMOST all - это объект» является правильным, потому что MAIN-коды (объекты, функции, массивы) являются объектами JavaScript. Код JavaScript использует 9 разных единиц плюс 1 (несколько): - 01. array - 02. boolean - 03. function - 04. null - 05. number - 06. object - 07. regexp - 08. string - 09. undefined - 10. multiple
НО JavaScript-объекты: - НЕ являются теми же существами, что и «объекты» на других объектно-ориентированных языках. - они представляют собой набор пар имен-значений. - у всех есть функция создания (его конструктор). - все INHERIT являются членами прототипа-объекта его конструктора, и это его прототип. - все функции являются объектами, но не все объекты являются функциями. - функции имеют область, объекты НЕ (дефект дизайна, на мой взгляд). - Объект, функция, массив, строка, ... с первым CAPITAL - это функции !!! - важнее различия в объектах и функциях JS, чем его общие черты. - имя «экземпляр» в JS имеет разное значение с именем «экземпляр» в теории знаний, где экземпляр наследует атрибуты его общей концепции. В JS обозначается только его конструктор. JavaScript получил имя «экземпляр» из класса «наследование на основе класса» ool (java), где это подходящее имя, потому что эти объекты наследуют атрибуты классов.
JS-функции ARE JS-объекты, потому что: 1) они могут иметь такие элементы, как JS-объекты:
> function f(){} undefined > f.s = "a string" "a string" > f.s "a string"
2) у них есть конструктор-функция, как и все JS-объекты, функция Function:
> (function f(){}) instanceof Function true
3) как все JS-объекты, их прототип-объект совпадает с его конструктором прототип:
> (function f(){}).__proto__ === Function.prototype true > ({}).__proto__ === Object.prototype true > (new Object).__proto__ === Object.prototype true
4), конечно, JS-функции как СПЕЦИФИЧЕСКИЕ JS-объекты имеют и дополнительные атрибуты, как и все функции в языках программирования, что JS-объекты не имеют, как вы можете звонить ( выполнить) их с информацией ввода и вывода.
ВСЕ НЕ является объектом, потому что, например, мы НЕ можем добавлять членов в литеральную строку:
> var s = "string" undefined > s.s2 = "s2string" "s2string" > s.s2 undefined
Нет, не все это объект в JavaScript. Многие вещи, с которыми вы регулярно взаимодействуете (строки, числа, булевы), являются примитивами, а не объектами. В отличие от объектов, примитивные значения неизменяемы. Ситуация осложняется тем, что эти примитивы имеют обертки объектов (String
, Number
и Boolean
); эти объекты имеют методы и свойства, а примитивы - нет, но у примитивов, как представляется, есть методы, потому что JavaScript молча создает объект-оболочку, когда код пытается получить доступ к любому свойству примитива.
Например, рассмотрим следующее Код:
var s = "foo";
var sub = s.substring(1, 2); // sub is now the string "o"
За кулисами s.substring(1, 2)
ведет себя так, как если он выполняет следующие (приблизительные) шаги:
String
объект из s
, эквивалентный использованию new String(s)
substring()
с соответствующими параметрами объекта String
, возвращенного на шаг 1 String
object Следствием этого является то, что, хотя кажется, что вы можете назначать свойства примитивам, это бессмысленно потому что вы не можете их получить:
var s = "foo";
s.bar = "cheese";
alert(s.bar); // undefined
Это происходит потому, что свойство эффективно определено на объекте String
, который сразу же отбрасывается.
Номера и булевы также ведут себя таким образом. Функции, однако, являются полностью реализованными объектами и наследуются от Object
(фактически Object.prototype
, но это еще одна тема). Таким образом, функции могут выполнять любые объекты, включая наличие свойств:
function foo() {}
foo.bar = "tea";
alert(foo.bar); // tea
var s = new String('foo');
, тогда s.bar
сохранит значение cheese
.
– user75525
15 March 2014 в 21:58
new String('foo')
создает объект String
, который ведет себя как любой другой объект, потому что он наследует от Object.prototype
.
– Tim Down
16 March 2014 в 12:04
Не все - объект в javaScript. JavaScript имеет примитивы и объекты. Существует шесть примитивов: null, undefined, string, number, boolean и symbol. Может показаться, что все действует как объект из-за свойств и функций, к которым можно получить доступ. Например,
var stringvar="this string";
typeof stringvar; // "string"
stringvar.length; //11
теперь, поскольку «stringvar» является строковым типом, который является примитивным типом, он не должен иметь доступ к длине свойства. Это может быть сделано из-за чего-то, называемого Boxing.Boxing - это процесс, в котором любой примитивный тип преобразуется в тип объекта, а обратный называется Unboxing. Эти типы объектов или обертки объектов создаются с помощью представление о том, что существуют некоторые общие операции, которые могут потребоваться для выполнения с примитивными значениями. Они содержат полезные методы и свойства и являются прототипами, связанными с примитивами. Что касается объектов, пары ключевых значений могут быть добавлены к каждому объекту, даже к массивам.
var arr=[1,2,3];
arr.name="my array";
arr; //[1,2,3,name:'my array']
это не означает, что четвертый элемент массива - это «имя:» мой array '"." name "- это свойство, которое может быть вызвано с помощью точечной нотации (arr.name) или в виде скобок (arr [" name "]).
length
не возвращает количество элементов в массиве. Он возвращаетlastIndex + 1
для этого массива. Например, вvar x = []; x[100] = 5; alert(x.length)
выдается предупреждение101
. – Rohan Prabhu 2 February 2012 в 11:19