$(document).on('change', '.units', function () {
var obj = $(this);
unit_id = parseInt($(this).val());
var item_array = [];
var unit_array = [];
var units = $(".units");
var items = $(".items");
$('#used_items tr').each(function () {
$(this).find('.items').each(function () {
item_array.push($(this).val());
});
$(this).find('.units').each(function () {
unit_array.push($(this).val());
});
});
var item_unit_associative_array = [];
for (var i = 0; i < units.length; i++) {
if (item_unit_associative_array[item_array[i]] == unit_array[i]) {
obj.val('');
return alert("Given Item Unit Already Selected");
}
else {
item_unit_associative_array[item_array[i]] = unit_array[i];
}
}
console.log(item_unit_associative_array););
从 item_array 和 unit_array 我想构建新的对象,例如
var item_unit_associative_array=[1:12, 1:13 ,1:14,2:10];
最后想检查一个对象由 key:value 组成
var test ={1:12}
是否存在于item_unit_associative_array
最佳答案
我认为您需要嵌套两层对象。结构见注释:
var items = [ 1, 1, 1, 2];
var units = [12, 13, 14, 10];
// Create the object like so:
// {
// 1: { 12: true, 13: true, 14: true },
// 2: { 10: true }
// }
var itemUnitAssociativeObject = {};
units.forEach(function(unitId, i) {
var itemId = items[i];
if (!itemUnitAssociativeObject[itemId]) {
itemUnitAssociativeObject[itemId] = {};
}
itemUnitAssociativeObject[itemId][unitId] = true;
});
console.log("1:13", test(1, 13));
console.log("1:10", test(1, 10));
console.log("2:10", test(2, 10));
function test(item, unit) {
return !!(itemUnitAssociativeObject[item] &&
itemUnitAssociativeObject[item][unit]);
}
如果您不喜欢嵌套以及它使测试复杂化的方式,您还可以“字符串化”项目单元 ID 组合:
var items = [ 1, 1, 1, 2];
var units = [12, 13, 14, 10];
// Create the object like so:
// {
// "1:12": true,
// "1:13": true, // etc.
// }
var map = items.reduce(function(map, itemId, i) {
var id = itemId + ":" + units[i];
map[id] = true;
return map;
}, {});
console.log("1:13", map["1:13"]);
console.log("1:10", map["1:10"]);
console.log("2:10", map["2:10"]);
关于javascript - 在 JavaScript 数组中存储相同的键和不同的值并与键值对匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41123397/