다음과 같은 부동산 주택 객체의 자바스크립트 배열이 있습니다:
var json = {
'homes': [{
"home_id": "1",
"price": "925",
"sqft": "1100",
"num_of_beds": "2",
"num_of_baths": "2.0",
}, {
"home_id": "2",
"price": "1425",
"sqft": "1900",
"num_of_beds": "4",
"num_of_baths": "2.5",
},
// ... (more homes) ...
]
}
var xmlhttp = eval('(' + json + ')');
homes = xmlhttp.homes;
제가 하고 싶은 것은 객체에 필터를 수행하여
예를 들어 가격
, 평방 피트
, 침대 수
및 욕실 수
를 기준으로 필터링할 수 있기를 원합니다.
아래 의사 코드와 같은 자바스크립트에서 어떤 작업을 수행하려면 어떻게 해야 하나요?
var newArray = homes.filter(
price <= 1000 &
sqft >= 500 &
num_of_beds >=2 &
num_of_baths >= 2.5 );
구문이 위와 정확히 같을 필요는 없습니다. 이것은 단지 예시일 뿐입니다.
배열.프로토타입.필터`]1 메서드를 사용할 수 있습니다:
var newArray = homes.filter(function (el) {
return el.price <= 1000 &&
el.sqft >= 500 &&
el.num_of_beds >=2 &&
el.num_of_baths >= 2.5;
});
라이브 예제:
var obj = {
'homes': [{
"home_id": "1",
"price": "925",
"sqft": "1100",
"num_of_beds": "2",
"num_of_baths": "2.0",
}, {
"home_id": "2",
"price": "1425",
"sqft": "1900",
"num_of_beds": "4",
"num_of_baths": "2.5",
},
// ... (more homes) ...
]
};
// (Note that because `price` and such are given as strings in your object,
// the below relies on the fact that <= and >= with a string and number
// will coerce the string to a number before comparing.)
var newArray = obj.homes.filter(function (el) {
return el.price <= 1000 &&
el.sqft >= 500 &&
el.num_of_beds >= 2 &&
el.num_of_baths >= 1.5; // Changed this so a home would match
});
console.log(newArray);
이 방법은 새로운 ECMAScript 5판 표준의 일부이며 거의 모든 최신 브라우저에서 찾을 수 있습니다.
IE의 경우 호환성을 위해 다음 방법을 포함할 수 있습니다:
if (!Array.prototype.filter) {
Array.prototype.filter = function(fun /*, thisp*/) {
var len = this.length >>> 0;
if (typeof fun != "function")
throw new TypeError();
var res = [];
var thisp = arguments[1];
for (var i = 0; i < len; i++) {
if (i in this) {
var val = this[i];
if (fun.call(thisp, val, i, this))
res.push(val);
}
}
return res;
};
}
다음은 jLinq와 같은 프레임워크를 사용해 볼 수 있는 코드 샘플입니다.
var results = jLinq.from(data.users)
.startsWith("first", "a")
.orEndsWith("y")
.orderBy("admin", "age")
.select();
자세한 내용은 http://www.hugoware.net/projects/jlinq 링크를 참조하세요.
밑줄 프레임워크입니다 이 더 좋아요. 많은 유용한 작업 객체에는 시사한다. 작업:
var newArray = homes.filter(
price <= 1000 &
sqft >= 500 &
num_of_beds >=2 &
num_of_baths >= 2.5);
다음과 같은 로버라이트너 수 있습니다.
var newArray = _.filter (homes, function(home) {
return home.price<=1000 && sqft>=500 && num_of_beds>=2 && num_of_baths>=2.5;
});
희망 유용하게 사용할 수 있습니다!
다음은 어떤 함수를 사용하여 IE8 에서 jquery 매핑해야 바이올린 apc® 작동합니다
json.HOMES = $.map(json.HOMES, function(val, key) {
if (Number(val.price) <= 1000
&& Number(val.sqft) >= 500
&& Number(val.num_of_beds) >=2
&& Number(val.num_of_baths ) >= 2.5)
return val;
});
이 작업을 매우 쉽게 수행할 수 있습니다. 아마도 많은 구현 중에서 선택할 수 있겠지만, 이것이 저의 기본 아이디어입니다(그리고 jQuery로 객체를 반복할 수 있는 형식이 있을 수 있지만 지금은 생각나지 않습니다):
function filter(collection, predicate)
{
var result = new Array();
var length = collection.length;
for(var j = 0; j < length; j++)
{
if(predicate(collection[j]) == true)
{
result.push(collection[j]);
}
}
return result;
}
그런 다음 이 함수를 다음과 같이 호출할 수 있습니다:
filter(json, function(element)
{
if(element.price <= 1000 && element.sqft >= 500 && element.num_of_beds > 2 && element.num_of_baths > 2.5)
return true;
return false;
});
이렇게 하면 정의한 술어에 따라 필터를 호출하거나 더 작은 필터를 사용하여 여러 번 필터링할 수도 있습니다.
const filteredHomes = json.homes.filter(x => x.price <= 1000 && x.sqft >= 500 && x.num_of_beds >=2 && x.num_of_baths >= 2.5);
.and 너무 쉽게 읽을 수 있습니다.
const filteredHomes = json.homes.filter( x =>
x.price <= 1000 &&
x.sqft >= 500 &&
x.num_of_beds >=2 &&
x.num_of_baths >= 2.5
);
여기에 필터링합니다 교도관님도요 요구에 맞는 방법을 어떻게 구현할 수 있습니다.
function myfilter(array, test){
var passedTest =[];
for (var i = 0; i < array.length; i++) {
if(test( array[i]))
passedTest.push(array[i]);
}
return passedTest;
}
var passedHomes = myfilter(homes,function(currentHome){
return ((currentHome.price <= 1000 )&& (currentHome.sqft >= 500 )&&(currentHome.num_of_beds >=2 )&&(currentHome.num_of_baths >= 2.5));
});
희망을 줍니다!
체크아웃하려고 합니다 고스자리스트 디스크입니다. diskid 기본으로 하며, 표준 javascript 어레이입니다 필터링부터 방법 (또한 그룹짓기, 정렬 및 발견사항). # 39 에 대한 it 지원 필터링합니다 here& 연산자의 목록이다.
'eq' //Equal to
'eqjson' //For deep objects, JSON comparison, equal to
'neq' //Not equal to
'in' //Contains
'nin' //Doesn't contain
'lt' //Lesser than
'lte' //Lesser or equal to
'gt' //Greater than
'gte' //Greater or equal to
'btw' //Between, expects value to be array [_from_, _to_]
'substr' //Substring mode, equal to, expects value to be array [_from_, _to_, _niddle_]
'regex' //Regex match
이 방법으로 사용할 수 있습니다
let list = new OGX.List(your_array);
list.addFilter('price', 'btw', 100, 500);
list.addFilter('sqft', 'gte', 500);
let filtered_list = list.filter();
심지어 이렇게
let list = new OGX.List(your_array);
let filtered_list = list.get({price:{btw:[100,500]}, sqft:{gte:500}});
1 과 라이너
let filtered_list = new OGX.List(your_array).get({price:{btw:[100,500]}, sqft:{gte:500}});
또는 단순히 '$ 그레이크 사용할 수 있습니다' (이 역시 객체에는 작동됨 아니라 어레이에는) 와 같은 새로운 시스템을 구축하고 있습니다.
var json = {
'homes': [{
"home_id": "1",
"price": "925",
"sqft": "1100",
"num_of_beds": "2",
"num_of_baths": "2.0",
}, {
"home_id": "2",
"price": "1425",
"sqft": "1900",
"num_of_beds": "4",
"num_of_baths": "2.5",
},
// ... (more homes) ...
{
"home_id": "3-will-be-matched",
"price": "925",
"sqft": "1000",
"num_of_beds": "2",
"num_of_baths": "2.5",
},
]
}
var homes = [];
$.each(json.homes, function(){
if (this.price <= 1000
&& this.sqft >= 500
&& this.num_of_beds >= 2
&& this.num_of_baths >= 2.5
) {
homes.push(this);
}
});
var filterHome = homes.filter(home =>
return (home.price <= 999 &&
home.num_of_baths >= 2.5 &&
home.num_of_beds >=2 &&
home.sqft >= 998));
console.log(filterHome);
람다 (λ) 이 기능을 사용할 수 있습니다. 더 자세히 korea. 이후 이곳에서 우리는 필터링하면 따라 데이터를 수집할 수 있는 또 다른 조건을 가지고 있는 진실 혹은 거짓 반품하십시오 data-in 어레이입니다 그러하매 실제 어레이입니다 수정되지 않은 것입니다.
@JGreig 부탁이네 들여다 볼 수 있습니다.
내가 사용하는 루리우스 '내' 에 따라 특정 기능을 필터링부터 객체에는 기능을 values. 원치 않는 속성 값을 대신 사용하고 싶은 조건을 들어 있다는 사실을 알고 있지만, 내 질문에 대한 답이 유효함 직무명 도왔으매 I& 하는 내 방식을 목마르겠구나 남겨두십시오 # 39; d
function ruleOut(arr, filterObj, applyAllFilters=true) {
return arr.filter( row => {
for (var field in filterObj) {
var val = row[field];
if (val) {
if (applyAllFilters && filterObj[field].indexOf(val) > -1) return false;
else if (!applyAllFilters) {
return filterObj[field].filter(function(filterValue){
return (val.indexOf(filterValue)>-1);
}).length == 0;
}
}
}
return true;
});
}
You have a list 라고 배우들의 다음과 같습니다.
let actors = [
{userName:"Mary", job:"star", language:"Turkish"},
{userName:"John", job:"actor", language:"Turkish"},
{userName:"Takis", job:"star", language:"Greek"},
{userName:"Joe", job:"star", language:"Turkish"},
{userName:"Bill", job:"star", language:"Turkish"}
];
그리고 싶은 배우 모두 찾을 수 있는 국적 중 하나를 & # 39 별표랑 홀리우드 평가되고, 안 # 39, & # 39, & # 39 Italian& English&,, # 39, & # 39,, # 39 Spanish& Greek& # 39, & # 39, 그리고 그들의 이름 중 하나로,, & # 39 않을 것이라고 Mary& Joe& # 39 # 39;;). 베이저 acrobatconnectcentral. 졸업식이잖니 어쨌든, 그 조건을 설정할 수 있습니다 다음 객체에는 만들 것이라고 주장했다.
let unwantedFieldsFilter= {
userName: ['Mary', 'Joe'],
job: ['actor'],
language: ['English', 'Italian', 'Spanish', 'Greek']
};
좋아, 이제 'you get if you' 루리우스 (배우, 운반트레드필드스필터) 만
>. [{sername: bill" ";, 작업: star" ";, 언어: ", Turkish".}]
이후, 빌 & # 39 는 your man, 그의 이름은 Mary& # 39, & # 39 아닌 한,,, # 39 Joe& 국적을 포함되지 않은 [& # 39, English& # 39, & # 39, Italian& # 39, & # 39, & # 39, # 39 Greek& Spanish& # 39;;;] 또한 그는 Star!
내 방법, 즉 '와' 애플이올필터스 있어 한 가지 옵션을 것은 기본적으로. 이와 함께 할 것이라고 하면, & # 39 로, 매개변수 루리우스 거짓값 표시됨과 작동합니까 OR& # 39;; # 39, & # 39, 대신 필터링부터 AND&. 예: '루리우스 (배우, {작업: [", actor",], 언어: [" Italian";]}, false)' 할 수 없는 모든 배우가 또는, 이탈리아어:
>. [{sername: mary" ";, 작업: star" ";, 언어: " Turkish".}, < br>;; {sername: takis" ";, 작업: star" ";, 언어: " Greek".}, < br>;; {sername: joe" ";, 작업: star" ";, 언어: " Turkish".}, < br>;; {sername: bill" ";, 작업: star" ";, 언어: ", Turkish".}]