繁体   English   中英

Typescript:如何创建 function 来比较这两个嵌套的 arrays?

[英]Typescript: How can I create a function to compare these two nested arrays?

我正在尝试比较这两个嵌套的 arrays 以确保它们是否相同但我无法弄清楚,我试图开始但无法完成。

我需要确保它们在selected_ingredients数组中具有相同的food_names和相同的成分。

任何帮助,将不胜感激。

interface DataInterface {
    food_name: string,
    selected_ingredients: Array<string>
}

const orderFood: Array<DataInterface> = [
    {selected_ingredients: ["Tomatoes", "Lettuce", "Cheese"], food_name: "Single Burger"},
    {selected_ingredients: [], food_name: "Fountain Drink"}
];

const orderFood2: Array<DataInterface> = [
    {food_name: "Single Burger", selected_ingredients: ["Tomatoes", "Lettuce", "Cheese"]},
    {food_name: "Fountain Drink", selected_ingredients: []}
]

function isSame() {
    for(let i = 0; i < orderFood.length; i++) {
        
    }
    return false;
}

您可以使用具有_.isEqual方法的 lodash。 这对对象执行深度相等。 这也适用于 arrays 。 唯一的问题是 isEqual 不会检查的排序顺序。

https://lodash.com/docs/4.17.15#differenceWith

下面有一些使用 isEqual 的示例。 我将由您决定是否应该在比较之前进行排序。 您需要进行深度排序,对selected_ingredients以及orderFood数组的值进行排序,以通过深度比较获得相关含义。

 const a = {food_name: "Single Burger", selected_ingredients: ["Tomatoes", "Lettuce", "Cheese"]} const b = {food_name: "Fountain Drink", selected_ingredients: []} const c = {food_name: "Fountain Drink", selected_ingredients: []} console.log('compare different objects:', _.isEqual(a, b)) console.log('compare same objects:', _.isEqual(b, c)) const orderFood = [ {selected_ingredients: ["Tomatoes", "Lettuce", "Cheese"], food_name: "Single Burger"}, {selected_ingredients: [], food_name: "Fountain Drink"} ] const orderFood2 = [ { food_name: "Single Burger", selected_ingredients: ["Tomatoes", "Lettuce", "Cheese"] }, {food_name: "Fountain Drink", selected_ingredients: []} ] console.log('compare same array of object:', _.isEqual(orderFood, orderFood2)) const orderFood3 = [ {food_name: "Fountain Drink", selected_ingredients: []}, {food_name: "Single Burger", selected_ingredients: ["Tomatoes", "Lettuce", "Cheese"] } ] console.log('compare same array of object with different order:', _.isEqual(orderFood2, orderFood3))
 <script src="https://cdn.jsdelivr.net/npm/lodash@4.17.20/lodash.min.js"></script>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM