javascript - 比较数组元素[重复]

问题描述 投票:0回答:2

这个问题在这里已有答案:

我有一个数组可能有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一个数组,还是应该更改为一个对象,以使这个问题更容易解决?

javascript
2个回答
1
投票

根据您的注释,您可以使用逗号进行排序和连接,并与每个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);

1
投票

您可以迭代对象并检查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);
© www.soinside.com 2019 - 2024. All rights reserved.