자바스크립트 연관 배열에서 객체를 제거하려면 어떻게 하나요?

이 코드가 있다고 가정해 보겠습니다:

var myArray = new Object();
myArray["firstname"] = "Bob";
myArray["lastname"] = "Smith";
myArray["age"] = 25;

이제 <성>을 제거하려면 .... 다음과 같은 코드가 있습니까? myArray["성"].remove()?

(요소의 수가 중요하고 깔끔하게 유지하고 싶기 때문에 요소를 제거해야 합니다.)

질문에 대한 의견 (3)
해결책

자바스크립트에서 키워드를 사용합니다.

delete myArray["lastname"];

편집:

일부 자바스크립트 엔진에서는 삭제 키워드가 컴파일/JIT 최적화를 취소하기 때문에 성능이 저하될 수 있습니다.

http://www.html5rocks.com/en/tutorials/speed/v8/ http://www.smashingmagazine.com/2012/11/writing-fast-memory-efficient-javascript/

해설 (13)

자바스크립트의 모든 객체는 해시 테이블/연관 배열로 구현됩니다. 따라서 다음은 이에 해당합니다:

alert(myObj["SomeProperty"]);
alert(myObj.SomeProperty);

그리고 이미 언급했듯이 '삭제' 키워드를 통해 객체에서 속성을 '제거'하는데, 두 가지 방법으로 사용할 수 있습니다:

delete myObj["SomeProperty"];
delete myObj.SomeProperty;

추가 정보가 도움이 되었기를 바랍니다...

해설 (3)

아무도 대답 없는 사실을 주소 이전 Javascript 시작하는 등 연관 배열 없다 '-' 방식의 어레이입니다 http://schmidt. devlib. '메리 페로프'.

Javascript 가 인스턴스들도 (동적 객체, 어떤 식으로 쓰면 다음과 같다. 그 때 요소 속성은 어레이에서는 객체에는 나쁜거라 Things™ 바인딩됩니다 인스턴스입니다 혼동하는 일이.

&lt h2&gt Problem&lt /h2>;;;

var elements = new Array()

elements.push(document.getElementsByTagName("head")[0])
elements.push(document.getElementsByTagName("title")[0])
elements["prop"] = document.getElementsByTagName("body")[0]

console.log("number of elements: ", elements.length)   // returns 2
delete elements[1]
console.log("number of elements: ", elements.length)   // returns 2 (?!)

for (var i = 0; i < elements.length; i++)
{
   // uh-oh... throws a TypeError when i == 1
   elements[i].onmouseover = function () { window.alert("Over It.")}
   console.log("success at index: ", i)
}

&lt h2&gt Solution&lt /h2>;;;

보편적 제거 기능을 가질 수 없는 너회들 위에 폭파시킨 다음 사용합니다.

Object.prototype.removeItem = function (key) {
   if (!this.hasOwnProperty(key))
      return
   if (isNaN(parseInt(key)) || !(this instanceof Array))
      delete this[key]
   else
      this.splice(key, 1)
};

//
// Code sample.
//
var elements = new Array()

elements.push(document.getElementsByTagName("head")[0])
elements.push(document.getElementsByTagName("title")[0])
elements["prop"] = document.getElementsByTagName("body")[0]

console.log(elements.length)                        // returns 2
elements.removeItem("prop")
elements.removeItem(0)
console.log(elements.hasOwnProperty("prop"))        // returns false as it should
console.log(elements.length)                        // returns 1 as it should
해설 (4)

이렇게 하면 객체만 삭제되지만 배열 길이는 그대로 유지됩니다.

제거하려면 다음과 같은 작업을 수행해야 합니다:

array.splice(index, 1);
해설 (3)

반면, 이 설명이 정확한 답이 수락됨 누락되었는지 왜 작동하잖아.

첫째, 이 사실을 안 것은 어레이에서는 코드에 설명하노라 합니다.

var myObject = new Object();
myObject["firstname"] = "Bob";
myObject["lastname"] = "Smith";
myObject["age"] = 25;

단, 모든 객체에는 (어레이입니다 등 '의) 이 방법으로 사용할 수 있습니다. 그러나 표준 작성되지는 않습니다 JS 어레이입니다 기능 (push, pop.) 작업할 수 객체에는!

'로 사용할 수 있습니다' 라고 한다고 수락됨 삭제하시겠습니까 분리하십시오 항목에서 안내선:

delete myObject["lastname"]

프로파일링하려는 시행하십시오 라우트를 결정해야 합니다 (연관 배열 / 사전) 을 사용하여 객체를 사용하거나 어레이에는 (지도). 그들 두 사용할 수 없다.

해설 (1)

'' 에서 완전히 제거 방법 사용 스플라이스를 품목으로부터 객체에는 어레이입니다:

Object.prototype.removeItem = function (key, value) {
    if (value == undefined)
        return;

    for (var i in this) {
        if (this[i][key] == value) {
            this.splice(i, 1);
        }
    }
};

var collection = [
    { id: "5f299a5d-7793-47be-a827-bca227dbef95", title: "one" },
    { id: "87353080-8f49-46b9-9281-162a41ddb8df", title: "two" },
    { id: "a1af832c-9028-4690-9793-d623ecc75a95", title: "three" }
];

collection.removeItem("id", "87353080-8f49-46b9-9281-162a41ddb8df");
해설 (1)

어떤 때는 다른 답을 갖고 있지 않지만, Javascript 어레이입니다 사용하고 있다고, Javascript 객체에는 작동됨 모든 것을 제외하면 거의 같은 다른 언어에서는 연관 어레이입니다 변환할지 써줬지 키 새 [매핑해야] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map) 는 기존 키로 유형:.

어레이에서는 했을 경우, 아닌 객체에는 array& 사용할 수 있습니다 # 39 의 [윈필터] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter) 기능을 원하는 항목을 없이 새 어레이입니다 반환되기를 재거됨:

var myArray = ['Bob', 'Smith', 25];
myArray = myArray.filter(function(item) {
    return item !== 'Smith';
});

Jquery, jQuery 는 이전 브라우저와 경우 ['$ 지그레프' 방법] (https://api.jquery.com/jQuery.grep/) 가 동작합니다.

myArray = $.grep(myArray, function(item) {
    return item !== 'Smith';
});
해설 (1)

객체에는 연관 배열을 사용하고 있으면, you are not 꼴입니다. 연관 배열, 다음과 같은 항목을 추가하거나 제거할 수 있는 댁이라면

    Array.prototype.contains = function(obj) 
    {
        var i = this.length;
        while (i--) 
        {
            if (this[i] === obj) 
            {
                return true;
            }
        }
        return false;
    }

    Array.prototype.add = function(key, value) 
    {
        if(this.contains(key))
            this[key] = value;
        else
        {
            this.push(key);
            this[key] = value;
        }
    }

    Array.prototype.remove = function(key) 
    {
        for(var i = 0; i < this.length; ++i)
        {
            if(this[i] == key)
            {
                this.splice(i, 1);
                return;
            }
        }
    }

    // Read a page's GET URL variables and return them as an associative array.
    function getUrlVars()
    {
        var vars = [], hash;
        var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');

        for(var i = 0; i < hashes.length; i++)
        {
            hash = hashes[i].split('=');
            vars.push(hash[0]);
            vars[hash[0]] = hash[1];
        }

        return vars;
    }

    function ForwardAndHideVariables() {
        var dictParameters = getUrlVars();

        dictParameters.add("mno", "pqr");
        dictParameters.add("mno", "stfu");

        dictParameters.remove("mno");

        for(var i = 0; i < dictParameters.length; i++)
        {
            var key = dictParameters[i];
            var value = dictParameters[key];
            alert(key + "=" + value);
        }
        // And now forward with HTTP-POST
        aa_post_to_url("Default.aspx", dictParameters);
    }

    function aa_post_to_url(path, params, method) {
        method = method || "post";

        var form = document.createElement("form");

        //move the submit function to another variable
        //so that it doesn't get written over if a parameter name is 'submit'
        form._submit_function_ = form.submit;

        form.setAttribute("method", method);
        form.setAttribute("action", path);

        for(var i = 0; i < params.length; i++)
        {
            var key = params[i];

            var hiddenField = document.createElement("input");
            hiddenField.setAttribute("type", "hidden");
            hiddenField.setAttribute("name", key);
            hiddenField.setAttribute("value", params[key]);

            form.appendChild(hiddenField);
        }

        document.body.appendChild(form);
        form._submit_function_(); //call the renamed function
    }
해설 (0)

There is an 세련된 방식으로 이를 스타일입니까 안내선 에어비앤비 (ES7):

const myObject = {
  a: 1,
  b: 2,
  c: 3
};
const { a, ...noA } = myObject;
console.log(noA); // => { b: 2, c: 3 }

저작권: https://codeburst.io/use-es2015-object-rest-operator-to-omit-properties-38a3ecffe90

해설 (0)

우리는 함수로 사용할 수 있는 것이 너무. 프로토타입 (prototype) 로 사용할 경우 각 던지는 약간의 오류가 발생했습니다. 감사합니다 @HarpyWar. 내가 이 문제를 해결할 수 있도록.

var removeItem = function (object, key, value) {
    if (value == undefined)
        return;

    for (var i in object) {
        if (object[i][key] == value) {
            object.splice(i, 1);
        }
    }
};

var collection = [
    { id: "5f299a5d-7793-47be-a827-bca227dbef95", title: "one" },
    { id: "87353080-8f49-46b9-9281-162a41ddb8df", title: "two" },
    { id: "a1af832c-9028-4690-9793-d623ecc75a95", title: "three" }
];

removeItem(collection, "id", "87353080-8f49-46b9-9281-162a41ddb8df");
해설 (0)

& # 39 에서 엔트리입니다 제거할 수 있습니다, 이를 통해 매핑해야 명시적으로 지정하여 undefined& # 39;. 같이 케이스.

&gt. myArray [lastname&quot ";] = 정의되지 않았습니다.

해설 (1)

Delete 키 (key) 는 만약 어떤 이유로든 작동안함 (like it 일하는 않네 me)

값이 정의되지 않은 필터링합니다 스플라이스를 아웃해야 수 있습니다 다음

// to cut out one element via arr.splice(indexToRemove, numberToRemove);
array.splice(key, 1)
array.filter(function(n){return n});

그 이후, chain 시도하시겠습니까 스플라이스를 재거됨 구성 요소, 되돌려줍니다 않습니다.

해설 (0)

이 프로젝트의 경우 의존도가 매우 간단하지는 [언더스코엘가이스] [1] -

_.omit(myArray, "lastname")

[1]: http://underscorejs.org/ # 생략하십시오

해설 (0)

, ',' 키워드를 사용하여 &quot delete&quot 배열 요소의 삭제하시겠습니까 javascript 에서 어레이로부터 될 것이라고 말했다.

예를 들어,

고려해보십시오 정보정의다음 명령문입니다.

var arrayElementToDelete = new Object();

arrayElementToDelete["id"]           = "XERTYB00G1"; 
arrayElementToDelete["first_name"]   = "Employee_one";
arrayElementToDelete["status"]       = "Active"; 

delete arrayElementToDelete["status"];

마지막 줄의 코드가 who& # 39 의 키는 배열 요소의 분리하십시오 &quot status"; &solarisdvd 어레이입니다.

해설 (0)
var myArray = newmyArray = new Object(); 
myArray["firstname"] = "Bob";
myArray["lastname"] = "Smith";
myArray["age"] = 25;

var s = JSON.stringify(myArray);

s.replace(/"lastname[^,}]+,/g,'');
newmyArray = JSON.parse(p);

우리 같은 결과를 가져온 없이 루프을 /

해설 (0)

Arrays&quot 대한 ";:

  • Index:* 알고 있는 경우
array.splice(index, 1);
  • Value:* 알고 있는 경우
function removeItem(array, value) {
    var index = array.indexOf(value);
    if (index > -1) {
        array.splice(index, 1);
    }
    return array;
}

이런 문제에 대한 가장 업보테드 '가 아닌' 제대로 삭제하시겠습니까 객체에는 실제 배열입니다. '삭제' 를 사용하고 있는 요소를 제거한 상태로 유지합니다 요소로 '빈' 와 루프 길이 어레이입니다 변했다니까 못함 몇 가지 시나리오를 문제가 될 수 있습니다.

예를 들어, 나는한다 미라이스토스트링 () 를 제거한 후, 즉, '빈' 삭제하시겠습니까 myArray 통해 만든 엔트리입니다.

해설 (0)

유일한 방법은 apc® 봐요.

function removeItem (array, value) {
    var i = 0;
    while (i < array.length) {
        if(array[i] === value) {
            array.splice(i, 1);
        } else {
            ++i;
        }
    }
    return array;
}

사용법:

var new = removeItem( ["apple","banana", "orange"],  "apple");
// ---> ["banana", "orange"]
해설 (1)