包含对象的多维数组的深度比较

考虑以下数组结构。这是一个伪语法,其中TableandRow只是一个Array. 并且Row包含不同的对象。我将其用于类似 Excel 表格的应用程序。


Table [Row, Row, Row, ...]

    0: Row

        0: TextEntry {value: "1", active: false}

        1: TextEntry {value: "3", active: false}

        2: NumberEntry {value: 0, active: false}

    1: Row

        0: TextEntry {value: "text", active: false}

        1: TextEntry {value: "8", active: false}

        2: NumberEntry {value: 0, active: false}

    2: Row

        0: TextEntry {value: "1", active: false}

        1: TextEntry {value: "3", active: false}

        2: NumberEntry {value: 0, active: false}

    ...

我想通过比较属性来确定是否有一个Rowinside insideTable与另一个相同。在此示例中,on 索引与 on 索引 相同。Rowvaluearray02


我怎样才能在js中实现这一点?


森栏
浏览 110回答 1
1回答

神不在的星期二

我认为Array 原型的组合some和功能应该足够了。everywith 的版本some返回布尔结果。with 的版本filter返回行本身。除非你想要实现的是检查表是否包含重复的行?我在下面添加了一个示例。const table = [  [      {value: "1", active: false},      {value: "3", active: false},      {value: 0, active: false}  ],  [      {value: "text", active: false},      {value: "8", active: false},      {value: 0, active: false}  ],  [      {value: "1", active: false},      {value: "3", active: false},      {value: 0, active: false}  ]];const rowToFind=[  {value: "1", active: false},  {value: "3", active: false},  {value: 0, active: false}];let foundRows=table.filter(m => m.every((el, indx, arr)=>rowToFind[indx].value==el.value));let foundRowsBoolean=table.some(m => m.every((el, indx, arr)=>rowToFind[indx].value==el.value));console.log(foundRows);console.log(foundRowsBoolean);//Check duplicated rowslet foundDuplicates=table.some((el, indx)=> table.some((el2, indx2)=> indx!=indx2 && el.every((e, indx)=>e.value==el2[indx].value)));console.log(`Contains duplicates: ${foundDuplicates}`);
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript