programing

개체의 속성 이름을 가져오는 중

yoursource 2023. 7. 26. 22:46
반응형

개체의 속성 이름을 가져오는 중

자바스크립트에서 그런 객체를 루프할 수 있는 방법이 있는지 궁금합니다.

for(var i in myObject) {
    // ...
}

하지만 이렇게 각 자산의 이름을 얻습니다.

for(var i in myObject) {
    separateObj[myObject[i].name] = myObject[i];
}

저는 구글에서 그것과 같은 것을 찾을 수 없는 것 같습니다.그들은 변수의 이름을 함께 전달하라고 하지만 이것은 제가 달성하고자 하는 것에 대한 옵션이 아닙니다.

도움을 주셔서 감사합니다.

Object.keys() 사용:

var myObject = { a: 'c', b: 'a', c: 'b' };
var keyNames = Object.keys(myObject);
console.log(keyNames); // Outputs ["a","b","c"]

Object.keys()입력 개체에 속하는 속성 이름 배열을 제공합니다.

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])
}

당신은 물체에서 쉽게 반복할 수 있습니다.

예: 객체가 vara = {a:'apple', b:'ball', c:'cat', d:'prefix', e:'prefix'}이면;

Object.keys(a).forEach(key => {
   console.log(key) // returns the keys in an object
   console.log(a[key])  // returns the appropriate value 
})

"Object.keys(obj)" 이외에는 매우 간단한 "for...in" 루프가 있습니다. 이 루프는 개체의 열거 가능한 속성 이름 위에 루프합니다.

const obj = {"fName":"John","lName":"Doe"};

for (const key in obj) {
    //This will give key
      console.log(key);
    //This will give value
    console.log(obj[key]);
    
}

위치별로 개체 속성에 직접 액세스하는 경우...일반적으로 [0] 속성에 사용 가능...그래서 더 먼 곳에 대한 정보를 담고 있습니다또는 처음 로드된 외부 모듈 등에 대해 node.js 'sys.cache[0]'에 있습니다.

Object.keys( myObject )[ 0 ]
Object.keys( myObject )[ 1 ]
...
Object.keys( myObject )[ n ]

기본 언어에 따라 개체 또는 "array key" 또는 "array index"의 속성을 가져오려면...Object.keys() 메서드를 사용합니다.

중요한 점은 이 기능이 "현대 브라우저"와만 호환된다는 점입니다.

그래서 만약 당신의 물건이 불려진다면, 나의 물건은...

var c = 0;
for(c in myObject) {
    console.log(Object.keys(myObject[c]));
}

왈라! 이것은 최신 파이어폭스와 i11 그리고 크롬에서 확실히 작동할 것입니다...

다음은 MDN https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys 에 있는 문서입니다.

IN 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_ELENTLENT'가 되고, '2'가 'BLUE_ELENTLENT'가 되는 함수를 가지려면 다음과 같이 하십시오.

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"]

용사를 합니다.Object.keys()에서 속획기기위능에서 Object이름별로 속성을 검색하는 데 도움이 됩니다. 예를 들어 다음과 같습니다.

const Products = function(){
    this.Product = "Product A";
    this.Price = 9.99;
    this.Quantity = 112;
};

// Simple find function case insensitive
let findPropByName = function(data, propertyName){
 let props = [];
 Object.keys(data).forEach(element => {
    return props.push(element.toLowerCase());
  });
  console.log(props);
  let i = props.indexOf(propertyName.toLowerCase());

  if(i > -1){
    return props[i];
  }
  return false;
};

// calling the function
let products = new Products();
console.log(findPropByName(products, 'quantity'));

먼저 올린 for/in 루프를 수행할 때 i가 속성 이름입니다.속성 이름 i를 가지고 있고 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);
}

언급URL : https://stackoverflow.com/questions/4260308/getting-the-objects-property-name

반응형