Убедитесь, что у вас есть правильный адрес электронной почты перед отправкой сообщений электронной почты. Если кто-то задает неправильный адрес электронной почты при регистрации, побейте их по голове как можно скорее.
Всегда включайте четкую информацию о том, как отказаться от подписки, в КАЖДОЙ электронной почте.
Это не позволит пользователям помечать ваши письма как спам, потому что «отмена подписки» слишком сложна.
Не нужно подписывать пользователя для отказа от подписки, это должен быть уникальный URL-адрес для отмены подписки на 1 клик. ] Вы можете использовать метод Array.prototype.filter
:
var newArray = homes.filter(function (el) {
return el.price <= 1000 &&
el.sqft >= 500 &&
el.num_of_beds >=2 &&
el.num_of_baths >= 2.5;
});
Live Пример:
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 5th Edition и может быть найден почти во всех современных браузерах.
Для 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;
};
}
Вы можете использовать jQuery.grep (), поскольку jQuery 1.0:
$.grep(homes, function (h) {
return h.price <= 1000
&& h.sqft >= 500
&& h.num_of_beds >= 2
&& h.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));
});
Надеюсь, это поможет!
Вы должны проверить OGX.List , который имеет встроенные методы фильтрации и расширяет стандартный массив javascript (а также группировку, сортировку и поиск). Вот список операторов, которые он поддерживает для фильтров:
'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();
И вы можете добавить столько фильтров, сколько хотите (по одному в только свойство)
Я предпочитаю фреймворк Underscore. Он предлагает много полезных операций с объектами. Ваша задача:
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;
});
Надеюсь, это будет полезно для вас!
underscore-query
( github.com/davidgtonge/underscore-query ), который использует синтаксис MongoDB для запроса массивов javascript. Итак, здесь вы будете использовать _.query(homes, {price: {$lt:1000}, sqft: {$gte: 500}, num_of_beds: {$gte:2}, num_of_baths: {$gte: 2.5}}
– prototype
20 January 2015 в 00:18
Вы можете сделать это довольно легко - возможно, есть много вариантов реализации, но это моя основная идея (и, вероятно, есть какой-то формат, в котором вы можете перебирать объект с помощью 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;
});
Таким образом, вы можете вызывать фильтр на основе любого предиката, который вы определяете, или даже фильтруйте несколько раз, используя фильтры меньшего размера.
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);
Вы можете использовать эту лямбда-функцию. Более подробную информацию можно найти здесь, поскольку мы фильтруем данные на основе вашего условия, которое возвращает true или false, и оно будет собирать данные в разных массивах, чтобы ваш фактический массив не был изменен.
@JGreig Пожалуйста, изучите его.
Или вы можете просто использовать $.each
(который также работает для объектов, а не только для массивов) и построить новый массив следующим образом:
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);
}
});
Вы можете попробовать использовать фреймворк вроде jLinq. Ниже приведен пример кода использования jLinq
var results = jLinq.from(data.users)
.startsWith("first", "a")
.orEndsWith("y")
.orderBy("admin", "age")
.select();
. Для получения дополнительной информации вы можете перейти по ссылке http://www.hugoware.net/ проекты / jlinq
здесь рабочая скрипка, которая отлично работает в IE8 с использованием функции jQuery MAP
http://jsfiddle.net/533135/Cj4j7/
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;
});