onchange 事件期间的 UnderScore 动态过滤器
UnderScore Dynamic Filter during onchange event
在 onchange 事件期间尝试通过传递参数来过滤对象时,结果得到一个空数组。
虽然尝试对这些键和值进行硬编码,但它 return 是一个对象并且工作正常,在这种情况下,它总是 return 一个具有 Ram[ 的数组=32=] 作为值
var empDetails = [{
name: "Raju",
id: 123
},
{
name: "Ram",
id: 456
}, {
name: "Anand",
id: 789
}, {
name: "Venkat",
id: 987
}
];
function onFilter(columnName) {
var columnValue = document.getElementById(columnName).value;
empDetails = _.filter(empDetails, {
"name": "Ram"
});
console.log(empDetails);
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore.js"></script>
<input class="form-control input-sm" id="name" type="text" onchange="onFilter('name')">
但在下面的例子中,它 return 是一个空数组
var empDetails = [{
name: "Raju",
id: 123
},
{
name: "Ram",
id: 456
}, {
name: "Anand",
id: 789
}, {
name: "Venkat",
id: 987
}
];
function onFilter(columnName) {
console.log(columnName);
var columnValue = document.getElementById(columnName).value;
console.log(columnValue);
empDetails = _.filter(empDetails, {
columnName: columnValue
});
console.log(empDetails);
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore.js"></script>
<input class="form-control input-sm" id="name" type="text" onchange="onFilter('name')">
您筛选的是关键字 "columnName"
而不是 "name"
,正如您预期的那样。
此解决方案适合您,但没有 underscore.js
var empDetails = [{
name: "Raju",
id: 123
}, {
name: "Ram",
id: 456
}, {
name: "Anand",
id: 789
}, {
name: "Venkat",
id: 987
}
];
function onFilter(columnName) {
console.log(columnName);
var columnValue = document.getElementById(columnName).value;
console.log(columnValue);
var filteredEmpDetails = empDetails.filter(function (el) {
return el[columnName] === columnValue;
});
console.log(filteredEmpDetails);
}
<input class="form-control input-sm" id="name" type="text" onchange="onFilter('name')">
您可能应该使用内部变量 filteredEmpDetails
才能多次使用 onFilter
函数。
过滤器
_.filter(list, predicate, [context])
查看列表中的每个值,返回通过真值测试(谓词)的所有值的数组。
您的代码存在一些问题。
首先,_.filter
的第二个参数应该是一个函数
返回一个 bool
指示天气的项目应该被过滤掉
与否。
其次,您在 empDetails
之外定义了您的
onFilter
函数,应该定义在里面所以每个
onFilter
的执行不依赖于一个 empDetails
变量。
下面的代码应该可以解决您的问题:
function onFilter(columnName) {
var empDetails = [
{
name: "Raju",
id: 123
},
{
name: "Ram",
id: 456
},
{
name: "Anand",
id: 789
},
{
name: "Venkat",
id: 987
}
];
console.log(columnName);
var columnValue = document.getElementById(columnName).value;
console.log(columnValue);
empDetails = _.filter(empDetails, val => val[columnName] == columnValue);
console.log(empDetails);
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore.js"></script>
<input class="form-control input-sm" id="name" type="text" onchange="onFilter('name')">
在 onchange 事件期间尝试通过传递参数来过滤对象时,结果得到一个空数组。
虽然尝试对这些键和值进行硬编码,但它 return 是一个对象并且工作正常,在这种情况下,它总是 return 一个具有 Ram[ 的数组=32=] 作为值
var empDetails = [{
name: "Raju",
id: 123
},
{
name: "Ram",
id: 456
}, {
name: "Anand",
id: 789
}, {
name: "Venkat",
id: 987
}
];
function onFilter(columnName) {
var columnValue = document.getElementById(columnName).value;
empDetails = _.filter(empDetails, {
"name": "Ram"
});
console.log(empDetails);
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore.js"></script>
<input class="form-control input-sm" id="name" type="text" onchange="onFilter('name')">
但在下面的例子中,它 return 是一个空数组
var empDetails = [{
name: "Raju",
id: 123
},
{
name: "Ram",
id: 456
}, {
name: "Anand",
id: 789
}, {
name: "Venkat",
id: 987
}
];
function onFilter(columnName) {
console.log(columnName);
var columnValue = document.getElementById(columnName).value;
console.log(columnValue);
empDetails = _.filter(empDetails, {
columnName: columnValue
});
console.log(empDetails);
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore.js"></script>
<input class="form-control input-sm" id="name" type="text" onchange="onFilter('name')">
您筛选的是关键字 "columnName"
而不是 "name"
,正如您预期的那样。
此解决方案适合您,但没有 underscore.js
var empDetails = [{
name: "Raju",
id: 123
}, {
name: "Ram",
id: 456
}, {
name: "Anand",
id: 789
}, {
name: "Venkat",
id: 987
}
];
function onFilter(columnName) {
console.log(columnName);
var columnValue = document.getElementById(columnName).value;
console.log(columnValue);
var filteredEmpDetails = empDetails.filter(function (el) {
return el[columnName] === columnValue;
});
console.log(filteredEmpDetails);
}
<input class="form-control input-sm" id="name" type="text" onchange="onFilter('name')">
您可能应该使用内部变量 filteredEmpDetails
才能多次使用 onFilter
函数。
过滤器
_.filter(list, predicate, [context])
查看列表中的每个值,返回通过真值测试(谓词)的所有值的数组。
您的代码存在一些问题。
首先,
_.filter
的第二个参数应该是一个函数 返回一个bool
指示天气的项目应该被过滤掉 与否。其次,您在
empDetails
之外定义了您的onFilter
函数,应该定义在里面所以每个onFilter
的执行不依赖于一个empDetails
变量。
下面的代码应该可以解决您的问题:
function onFilter(columnName) {
var empDetails = [
{
name: "Raju",
id: 123
},
{
name: "Ram",
id: 456
},
{
name: "Anand",
id: 789
},
{
name: "Venkat",
id: 987
}
];
console.log(columnName);
var columnValue = document.getElementById(columnName).value;
console.log(columnValue);
empDetails = _.filter(empDetails, val => val[columnName] == columnValue);
console.log(empDetails);
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore.js"></script>
<input class="form-control input-sm" id="name" type="text" onchange="onFilter('name')">