这个问题在这里已有答案:
我有一个数组可能有4位数或更少(从html选择),例如myArray
的一些可能的变种:
myArray = ['1']
myArray = ['4']
myArray = ['2', '3']
myArray = ['1', '2', '3', '4']
etc...
现在我有一个对象可能有myArray
的变种,例如myObject
的一些可能的变种:
myObject = [
{active: false, forArrays:['2','4']},
{active: false, forArrays:['2,3,4','2,4']},
{active: false, forArrays:['2','1,4']},
{active: false, forArrays:['2']},
]
如果myArray
与其中一个forArrays
变体完全相同,我想将active更改为true。
我怎样才能做到这一点?我应该保持forArrays
一个数组,还是应该更改为一个对象,以使这个问题更容易解决?
根据您的注释,您可以使用逗号进行排序和连接,并与每个forArray元素进行比较:
let myArray = ['1','4']
let myObject = [
{active: false, forArrays:['2','4']},
{active: false, forArrays:['2,3,4','2,4']},
{active: false, forArrays:['2','1,4']},
{active: false, forArrays:['2']},
]
let myArrayString = myArray.sort().join(',');
myObject.forEach( obj =>
obj.active = obj.forArrays.some( el =>
myArrayString === el.split(',').sort().join(',')
)
)
console.log(myObject);
您可以迭代对象并检查forArrays
是否包含逗号分隔值。
对于未排序的值,您可以在高级中对它们进行排序。
function update(numbers) {
function asc(a, b) { return a - b; }
var values = numbers.slice().sort(asc).join();
myObject.forEach(function (o) {
if (o.forArrays.some(a => a.split(',').sort(asc).join() === values)) {
o.active = true;
}
});
}
var myObject = [{ active: false, forArrays: ['2', '4'] }, { active: false, forArrays: ['2,3,4', '2,4'] }, { active: false, forArrays: ['2', '1,4'] }];
update(['1']); // no change
console.log(myObject);
update(['2']);
update(['2', '4']);
console.log(myObject);