Как получить доступ к структуре данных JSON в javascript [duplicate]

Ответ HYRY не будет работать над новыми версиями matplotlib (nxutils устарел). Я создал новую версию, которая работает:

from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt
from matplotlib.path import Path
import numpy as np

map = Basemap(projection='cyl', resolution='c')

lons = [0., 0., 16., 76.]
lats = [0., 41., 19., 51.]

x, y = map(lons, lats)

locations = np.c_[x, y]

polygons = [Path(p.boundary) for p in map.landpolygons]

result = np.zeros(len(locations), dtype=bool) 

for polygon in polygons:

    result += np.array(polygon.contains_points(locations))

print result
333
задан Paul Roub 15 August 2017 в 16:57
поделиться

11 ответов

(источник из здесь .)

Обозначение квадратной скобки позволяет использовать символы, которые нельзя использовать с точечной нотацией:

var foo = myForm.foo[]; // incorrect syntax
var foo = myForm["foo[]"]; // correct syntax

Во-вторых, обозначения квадратной скобки полезны при работе с именами свойств, которые меняются предсказуемым образом:

for (var i = 0; i < 10; i++) {
  someFunction(myForm["myControlNumber" + i]);
}

Roundup:

  • Точечная запись быстрее записывается и читается.
  • Обозначение квадратной скобки позволяет получить доступ к свойствам, содержащим специальные символы и выбор свойств с использованием переменных

Другим примером символов, которые нельзя использовать с точечной нотацией, являются имена свойств , которые сами содержат точку .

Например, Ответ json может содержать свойство, называемое bar.Baz.

var foo = myResponse.bar.Baz; // incorrect syntax
var foo = myResponse["bar.Baz"]; // correct syntax
360
ответ дан robinCTS 17 August 2018 в 10:27
поделиться

Вам нужно использовать скобки, если имена свойств имеют специальные символы:

var foo = {
    "Hello, world!": true,
}
foo["Hello, world!"] = false;

Кроме этого, я полагаю, это просто вопрос вкуса. IMHO, точечное обозначение короче и делает более очевидным, что это свойство, а не элемент массива (хотя, конечно, JavaScript не имеет ассоциативных массивов).

4
ответ дан Álvaro González 17 August 2018 в 10:27
поделиться

Обозначение скобок позволяет вам получить доступ к свойствам по имени, хранящимся в переменной:

var obj = { "abc" : "hello" };
var x = "abc";
var y = obj[x];
console.log(y); //output - hello

obj.x не будет работать в этом случае.

87
ответ дан Aaron Digulla 17 August 2018 в 10:27
поделиться

Случай, когда примечание [] полезно:

Если ваш объект является динамическим, и могут быть некоторые случайные значения в таких ключах, как number и [] или любой другой специальный символ, например -

var a = { 1 : 3 };

Теперь, если вы попытаетесь получить доступ, как a.1, он будет через ошибку, потому что он ожидает строку там.

0
ответ дан Anshul 17 August 2018 в 10:27
поделиться

Точечная нотация не работает с некоторыми ключевыми словами (например, new и class) в Internet explorer 8.

У меня был этот код:

//app.users is a hash
app.users.new = {
  // some code
}

И это запускает страшный «ожидаемый indentifier» (по крайней мере, на IE8 на windows xp, я не пробовал другие среды). Простое исправление для этого состоит в том, чтобы переключиться на запись в скобках:

app.users['new'] = {
  // some code
}
8
ответ дан Benjamin Crouzier 17 August 2018 в 10:27
поделиться

Вообще говоря, они выполняют ту же работу. Тем не менее, нотация в виде скобок дает вам возможность делать то, что вы не можете сделать с точечной нотацией, например

var x = elem["foo[]"]; // can't do elem.foo[];

. Это можно расширить до любого свойства, содержащего специальные символы.

6
ответ дан CdB 17 August 2018 в 10:27
поделиться

Вы должны использовать обозначение квадратной скобки, когда -

  1. Имя свойства - это номер. var ob = { 1: 'One', 7 : 'Seven' }
    ob.7 // SyntaxError ob[7] // "Seven"
  2. Имя свойства имеет специальный символ. var ob = { 'This is one': 1, 'This is seven': 7, }
    ob.'This is one' // SyntaxError ob['This is one'] // 1
  3. Имя свойства присваивается переменной, и вы хотите получить доступ к значению свойства этой переменной. var ob = { 'One': 1, 'Seven': 7, } var _Seven = 'Seven'; ob._Seven // undefined ob[_Seven] // 7
0
ответ дан Harunur Rashid 17 August 2018 в 10:27
поделиться

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

1) Когда имена свойств динамически определяются (когда точные имена неизвестны до времени исполнения) .

2) При использовании цикла for..in для прохождения всех свойств объекта.

источник: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Working_with_Objects

3
ответ дан Lev Stefanovich 17 August 2018 в 10:27
поделиться

Позвольте мне добавить еще пример использования квадратного обозначения. Если вы хотите получить доступ к свойству, скажите x-proxy в объекте, тогда - будет интерпретироваться неправильно. Их также некоторые другие случаи, такие как пространство, точка и т. Д., Где точечная операция вам не поможет. Кроме того, если u имеет ключ в переменной, то только способ доступа к значению ключа в объекте - это скобка. Надеюсь, вы получите еще какой-то контекст.

0
ответ дан Manish Waran 17 August 2018 в 10:27
поделиться

Два наиболее распространенных способа доступа к свойствам в JavaScript - это точка и квадратные скобки. И value.x and value[x] получают доступ к свойству по значению, но не обязательно к одному и тому же свойству. Разница заключается в том, как интерпретируется х. При использовании точки точка после точки должна быть допустимым именем переменной, и она непосредственно называет это свойство. При использовании квадратных скобок выражение между скобками оценивается для получения имени свойства. В то время как value.x получает свойство value с именем «x», значение [x] пытается оценить выражение x и использует результат как имя свойства.

Итак, если вы знаете, что интересующее вас свойство в называется «длина», вы говорите value.length. Если вы хотите извлечь свойство, названное значением, хранящимся в переменной i, вы скажете value[i]. И поскольку имена свойств могут быть любой строкой, если вы хотите получить доступ к свойству с именем “2” или “John Doe”, вы должны использовать квадратные скобки: value[2] or value["John Doe"]. Это возможно, даже если вы знаете точное имя свойства заранее, потому что ни “2” nor “John Doe” не является допустимым именем переменной, и поэтому к нему нельзя получить доступ через точечную нотацию.

В случае массивов

Элементы массива хранятся в свойствах. Поскольку имена этих свойств являются числами, и нам часто нужно получить их имя от переменной, мы должны использовать синтаксис скобки для доступа к ним. Свойство length массива сообщает нам, сколько элементов оно содержит. Это имя свойства является допустимым именем переменной, и мы знаем его имя заранее, поэтому, чтобы найти длину массива, вы обычно пишете array.length, потому что это легче записать, чем array["length"].

4
ответ дан Sagar Munjal 17 August 2018 в 10:27
поделиться
  • 1
    Не могли бы вы подробнее рассказать о array.length? Вы говорите, что свойства, к которым обращаются с помощью точечной нотации, не оцениваются, поэтому в случае array.length он не даст нам «длину». строка вместо оцененного значения, в этом случае количество элементов в массиве? The elements in an array are stored in properties вот что меня смущает. Что вы подразумеваете под хранением в свойствах? Что такое свойства? В моем понимании массив - это просто набор значений без свойств. Если они хранятся в свойствах, то почему это не property: value / ассоциативный массив? – Limpuls 19 November 2017 в 16:04

Будьте осторожны при использовании этих обозначений: например. если мы хотим получить доступ к функции, присутствующей в родительском окне окна. В IE:

window['parent']['func']

не эквивалентен

window.['parent.func']

Мы можем либо использовать:

window['parent']['func'] 

, либо

window.parent.func 

для доступа к ней

7
ответ дан user2593104 17 August 2018 в 10:27
поделиться
Другие вопросы по тегам:

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