Получить имя массива или объекта по Javascript

3

javascript,arrays,object,

JavaScript, массивы, объект,

Ответов: 2


Отредактировано:

Для более конкретного. Я хочу сделать что-то вроде этого:"firstArray" "secondArray"

то он возвращается

"console.log(Object.keys({thisObject})[0]); // "thisObject""


Отредактированный-2:

window

он вернется

thisObject

Вместо

thisArray
32
2 принят

Фактически вы не можете выполнить то, что вы пытаетесь сделать в Javascript, но есть небольшой небольшой трюк, который вы можете использовать для регистрации имени объекта без прямого ввода его. Это не особенно полезно и не будет работать, если вы пытаетесь получить исходное имя аргумента функции, но вы можете сделать следующее:

var thisObject={ first:1, second:2};
var thisArray=[1,2,3,4]

console.log(window.hasOwnProperty("thisObject"));
console.log(window.hasOwnProperty("thisArray"));

console.log(window.thisObject);
console.log(window["thisArray"]);

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


1

Вы можете использовать объект для доступа иvar a = {first_name: "Mark"}; var b = a; // a and b both point to the same objectthisObjectthisArray

Как это -

a


0

В javascript переменные ссылаются на объекты, но сами объекты не называются. Поэтому, учитывая объект, вы не можете просто спросить его о его имени; это не имеет смысла. Когда вы думаете о том, как ссылки передаются в javascript, вы понимаете, насколько проблематично то, что вы пытаетесь, в общем случае. Например, рассмотрим следующее:

b

Если я прошу от имени этого объекта, если он вернется a, bили оба? Что теперь:

var a = {first_name: "Mark"};
var b = a;
a = undefined;

Это еще более сложно, если учесть, что один и тот же объект может ссылаться на имена в разных областях и модулях. Например:

var a = {first_name: "Mark"};
function test(obj) {
   var t = obj;
   getNames(obj) // <-- what should that return? a? obj? t? all of them?
}

Дайте конкретный объем, вы можете перебирать имена и находить те, которые равны вашему объекту, но это будет хрупким и, вероятно, неэффективным .

var a = {first_name: "Mark"}
var b = a
var c = {foo: "bar"}

function getNames(obj, scope) {
  for (name in scope){
    try {
      if (scope[name] === obj) console.log(name)
    } catch(e){continue} // avoid localStorage security error
  }
 }
 
 getNames(b, this) // should log 'a' and 'b' because both are in global scope

Но опять-таки приведенный выше код не дает вам имени объекта, он просто смотрит на каждое имя в конкретном объекте (в данном случае на глобальном объекте) и видит, какие из свойств объекта указывают на данный объект.

Конечно, не все объекты, которые в сфере охвата, даже имеют имена. Например::

let arr = [{foo: "bar"}, {foo: "baz"}]
getNames(arr[0]) // <-- what should that return?

Если имя объекта важно и вы хотите его отобразить, вы должны добавить свойство имени к объекту и использовать его вместо этого.

JavaScript, массивы, объект,
Похожие вопросы
Яндекс.Метрика