값이없는 경우 어떻게 배열에 푸시 할 수 있습니까? 내 배열은 다음과 같습니다.
[
{ name: "tom", text: "tasty" },
{ name: "tom", text: "tasty" },
{ name: "tom", text: "tasty" },
{ name: "tom", text: "tasty" },
{ name: "tom", text: "tasty" }
]
나도과 배열에 다시 밀어 시도하는 경우 name: "tom"
나 text: "tasty"
, 난 아무것도 일이하고 싶지 않아 …하지만 어느 쪽도 그 중 그때가없는 경우 난에 원하는.push()
어떻게해야합니까?
답변
사용자 정의 방법으로 Array 프로토 타입을 확장 할 수 있습니다.
// check if an element exists in array using a comparer function
// comparer : function(currentElement)
Array.prototype.inArray = function(comparer) {
for(var i=0; i < this.length; i++) {
if(comparer(this[i])) return true;
}
return false;
};
// adds an element to the array if it does not already exist using a comparer
// function
Array.prototype.pushIfNotExist = function(element, comparer) {
if (!this.inArray(comparer)) {
this.push(element);
}
};
var array = [{ name: "tom", text: "tasty" }];
var element = { name: "tom", text: "tasty" };
array.pushIfNotExist(element, function(e) {
return e.name === element.name && e.text === element.text;
});
답변
항목이 호출하여 존재하는 경우 문자열의 배열 (그러나 객체의 배열)의 경우, 당신은 확인할 수 .indexOf()
와 그렇지 않은 경우 그럼 그냥 밀어 배열에 항목을 :
var newItem = "NEW_ITEM_TO_ARRAY";
var array = ["OLD_ITEM_1", "OLD_ITEM_2"];
array.indexOf(newItem) === -1 ? array.push(newItem) : console.log("This item already exists");
console.log(array)
답변
Array.findIndex
함수를 인수로 사용하는 함수를 사용하는 것은 매우 쉽습니다 .
var a = [{name:"bull", text: "sour"},
{ name: "tom", text: "tasty" },
{ name: "tom", text: "tasty" }
]
var index = a.findIndex(x => x.name=="bob")
// here you can check specific property for an object whether it exist in your array or not
if (index === -1){
a.push({your_object});
}
else console.log("object already exists")
답변
http://api.jquery.com/jQuery.unique/
var cleanArray = $.unique(clutteredArray);
makeArray에 관심이있을 수도 있습니다.
이전 예제는 푸시하기 전에 존재하는지 확인하는 것이 가장 좋습니다. 나는 후시에서 프로토 타입의 일부로 선언 할 수 있다고 말하고 있습니다 (일명 클래스 확장이라고 생각합니다). 아래에서 크게 향상되지 않았습니다.
indexOf가 inArray보다 빠른 경로인지 확실하지 않은 경우를 제외하고? 아마.
Array.prototype.pushUnique = function (item){
if(this.indexOf(item) == -1) {
//if(jQuery.inArray(item, this) == -1) {
this.push(item);
return true;
}
return false;
}
답변
이러한 이유로 underscore.js 와 같은 js 라이브러리를 사용하십시오 . 사용 : 공용체 : 전달 된 배열의 공용체 : 하나 이상의 배열에 존재하는 고유 한 항목의 목록을 계산합니다.
_.union([1, 2, 3], [101, 2, 1, 10], [2, 1]);
=> [1, 2, 3, 101, 10]
답변
이처럼?
var item = "Hello World";
var array = [];
if (array.indexOf(item) === -1) array.push(item);
대상으로
var item = {name: "tom", text: "tasty"}
var array = [{}]
if (!array.find(o => o.name === 'tom' && o.text === 'tasty'))
array.push(item)
답변
나는 이것이 매우 오래된 질문이라는 것을 알고 있지만 ES6을 사용하는 경우 매우 작은 버전을 사용할 수 있습니다.
[1,2,3].filter(f => f !== 3).concat([3])
처음에는 항목을 제거하는 필터를 추가하십시오-이미 존재하는 경우 concat을 통해 추가하십시오.
보다 현실적인 예는 다음과 같습니다.
const myArray = ['hello', 'world']
const newArrayItem
myArray.filter(f => f !== newArrayItem).concat([newArrayItem])
배열에 객체가 포함되어 있으면 다음과 같이 필터 기능을 조정할 수 있습니다.
someArray.filter(f => f.some(s => s.id === myId)).concat([{ id: myId }])