MST

星途 面试题库

面试题:Svelte中derived store在嵌套数据结构场景下的应用

假设你有一个嵌套的数据结构,例如一个包含多个对象的数组,每个对象又包含多个属性。现在需要基于这个嵌套结构创建一个derived store,计算所有子属性的某个特定属性之和,你将如何实现?请描述实现思路并给出关键代码示例。
10.3万 热度难度
前端开发Svelte

知识考点

AI 面试

面试题答案

一键面试

实现思路

  1. 遍历嵌套数组中的每个对象。
  2. 对于每个对象,递归地遍历其属性(如果属性也是对象),找到特定属性并累加其值。

关键代码示例(以JavaScript为例)

function sumNestedProperty(data, targetProp) {
    let sum = 0;
    function traverse(obj) {
        for (let key in obj) {
            if (typeof obj[key] === 'object') {
                traverse(obj[key]);
            } else if (key === targetProp) {
                sum += obj[key];
            }
        }
    }
    data.forEach(item => traverse(item));
    return sum;
}

// 示例数据
const nestedData = [
    {
        prop1: 10,
        subObj: {
            targetProp: 5
        }
    },
    {
        targetProp: 3,
        subObj: {
            nestedProp: 2
        }
    }
];

const sum = sumNestedProperty(nestedData, 'targetProp');
console.log(sum); 

解释

  1. sumNestedProperty 函数接收嵌套数据结构 data 和目标属性名 targetProp
  2. traverse 函数递归遍历对象的属性。如果属性是对象,就继续递归调用 traverse;如果属性名与目标属性名相同,就将其值累加到 sum 中。
  3. 外层 forEach 遍历数组中的每个对象,调用 traverse 函数进行属性遍历和累加。
  4. 最后返回累加的结果。

不同编程语言实现思路类似,但语法会有所不同,例如Python代码如下:

def sum_nested_property(data, target_prop):
    def traverse(obj):
        nonlocal total_sum
        for key, value in obj.items():
            if isinstance(value, dict):
                traverse(value)
            elif key == target_prop:
                total_sum += value
    total_sum = 0
    for item in data:
        traverse(item)
    return total_sum

nested_data = [
    {
        'prop1': 10,
      'subObj': {
            'targetProp': 5
        }
    },
    {
        'targetProp': 3,
      'subObj': {
            'nestedProp': 2
        }
    }
]

total = sum_nested_property(nested_data, 'targetProp')
print(total)

在Python中,使用 nonlocal 声明来修改外层函数的变量 total_sum,函数逻辑和JavaScript类似,都是递归遍历嵌套结构并累加目标属性值。