Ответ 1
Используйте Object.keys():
var myObject = { a: 'c', b: 'a', c: 'b' };
var keyNames = Object.keys(myObject);
console.log(keyNames); // Outputs ["a","b","c"]
Мне было интересно, есть ли какой-либо путь в JavaScript, чтобы пропустить такой объект.
for(var i in myObject) {
// ...
}
Но получите имя каждого свойства, подобного этому.
for(var i in myObject) {
separateObj[myObject[i].name] = myObject[i];
}
Я не могу найти ничего подобного в Google. Говорят, чтобы передать имена переменных с ними, но это не вариант того, чего я пытаюсь достичь.
Спасибо за любую помощь, которую вы можете предложить.
Используйте Object.keys():
var myObject = { a: 'c', b: 'a', c: 'b' };
var keyNames = Object.keys(myObject);
console.log(keyNames); // Outputs ["a","b","c"]
i
- это имя.
for(var name in obj) {
alert(name);
var value = obj[name];
alert(value);
}
Итак, вы можете сделать:
seperateObj[i] = myObject[i];
Отказ Я неправильно понял вопрос: "Могу ли я узнать имя свойства, к которому был привязан объект", но решил оставить ответ, поскольку некоторые люди могут оказаться здесь при поиске этого.
Нет, объект может быть привязан к нескольким свойствам, поэтому он не может знать его имя.
var obj = {a:1};
var a = {x: obj, y: obj}
Каким будет имя obj?
Вы уверены, что не хотите, чтобы имя свойства из цикла for?
for (var propName in obj) {
console.log("Iterating through prop with name", propName, " its value is ", obj[propName])
}
Вы можете легко перебирать объекты
Например: если объект является var a = {a: 'apple', b: 'ball', c: 'cat', d: 'doll', e: 'elephant'};
Object.keys(a).forEach(key => {
console.log(key) // returns the keys in an object
console.log(a[key]) // returns the appropriate value
})
для прямого доступа к свойству объекта по позиции... обычно полезно для свойства [0]... поэтому он содержит информацию о дальнейшем... или в файле node.js require.cache [0] для первого загруженного внешнего модуля и т.д. и т.д.
Object.keys( myObject )[ 0 ]
Object.keys( myObject )[ 1 ]
...
Object.keys( myObject )[ n ]
Чтобы получить свойство объекта или "ключ массива" или "индекс массива" в зависимости от вашего родного языка... Используйте метод Object.keys().
Важно, это совместимо только с "Современными браузерами":
Итак, если ваш объект вызывается, myObject...
var c = 0;
for(c in myObject) {
console.log(Object.keys(myObject[c]));
}
Walla! Это определенно будет работать в последнем firefox и ie11 и chrome...
Вот несколько документов на MDN https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys
В ES5
например. у вас есть такой объект:
var ELEMENTS = {
STEP_ELEMENT: { ID: "0", imageName: "el_0.png" },
GREEN_ELEMENT: { ID: "1", imageName: "el_1.png" },
BLUE_ELEMENT: { ID: "2", imageName: "el_2.png" },
ORANGE_ELEMENT: { ID: "3", imageName: "el_3.png" },
PURPLE_ELEMENT: { ID: "4", imageName: "el_4.png" },
YELLOW_ELEMENT: { ID: "5", imageName: "el_5.png" }
};
И теперь, если вы хотите иметь функцию, если вы передаете "0" в качестве параметра - чтобы получить "STEP_ELEMENT", если "2", чтобы получить "BLUE_ELEMENT" и т.д. для
function(elementId) {
var element = null;
Object.keys(ELEMENTS).forEach(function(key) {
if(ELEMENTS[key].ID === elementId.toString()){
element = key;
return;
}
});
return element;
}
Это, вероятно, не лучшее решение проблемы, но полезно дать вам представление о том, как это сделать.
Приветствия.
Начиная с 2018 года, вы можете использовать Object.getOwnPropertyNames()
как описано в документации разработчика Mozilla.
const object1 = {
a: 1,
b: 2,
c: 3
};
console.log(Object.getOwnPropertyNames(object1));
// expected output: Array ["a", "b", "c"]
Когда вы делаете цикл for/in, который вы ставите первым, я является именем свойства. Таким образом, у вас есть имя свойства, я и доступ к значению, выполнив myObject [i].
Эти решения тоже работают.
// Solution One
function removeProperty(obj, prop) {
var bool;
var keys = Object.keys(obj);
for (var i = 0; i < keys.length; i++) {
if (keys[i] === prop) {
delete obj[prop];
bool = true;
}
}
return Boolean(bool);
}
//Solution two
function removeProperty(obj, prop) {
var bool;
if (obj.hasOwnProperty(prop)) {
bool = true;
delete obj[prop];
}
return Boolean(bool);
}
Быстрая и грязная:
function getObjName(obj) {
return (wrap={obj}) && eval('for(p in obj){p}') && (wrap=null);
}