代码之家  ›  专栏  ›  技术社区  ›  Powl_London

Javascript Object,返回一个新数组,其中包含与该对象匹配的索引[重复]

  •  -1
  • Powl_London  · 技术社区  · 1 年前

    我有以下数组,其中包含一个对象,该对象包含联赛场地和代码的详细信息。

    我还有另一个数组,里面只有联盟代码。

    我想按照联盟代码数组的顺序返回league.venue对象的新索引数组。

    例如,在这种情况下,新数组将是- [4,5,0,3,2] .

    我不确定是否最好 .map .filter 但我不想用 push() .

    league  = {};
    league.venue  = [];
    league.venue[0] = {};
    league.venue[0].code  = 1000;
    league.venue[0].team  = "Arsenal";
    
    league.venue[1] = {};
    league.venue[1].code  = 1001;
    league.venue[1].team  = "Spurs";
    
    league.venue[2] = {};
    league.venue[2].code  = 1002;
    league.venue[2].team  = "Liverpool";
    
    league.venue[3] = {};
    league.venue[3].code  = 1003;
    league.venue[3].team  = "Manchester City";
    
    league.venue[4] = {};
    league.venue[4].code  = 1004;
    league.venue[4].team  = "Manchester United";
    
    league.venue[5] = {};
    league.venue[5].code  = 1005;
    league.venue[5].team  = "Everton";
    
    league.code = [1004, 1005, 1000, 1003, 1002]
    2 回复  |  直到 1 年前
        1
  •  2
  •   Mureinik    1 年前

    对于中的每个元素 code 阵列你可以 findIndex 获取会场中相应元素的索引。使用 map ,这可以是单行:

    // Set up - code copied from OP
    league  = {};
    league.venue  = [];
    league.venue[0] = {};
    league.venue[0].code  = 1000;
    league.venue[0].team  = "Arsenal";
    
    league.venue[1] = {};
    league.venue[1].code  = 1001;
    league.venue[1].team  = "Spurs";
    
    league.venue[2] = {};
    league.venue[2].code  = 1002;
    league.venue[2].team  = "Liverpool";
    
    league.venue[3] = {};
    league.venue[3].code  = 1003;
    league.venue[3].team  = "Manchester City";
    
    league.venue[4] = {};
    league.venue[4].code  = 1004;
    league.venue[4].team  = "Manchester United";
    
    league.venue[5] = {};
    league.venue[5].code  = 1005;
    league.venue[5].team  = "Everton";
    
    league.code = [1004, 1005, 1000, 1003, 1002]
    
    // Solution - find each code in league.venue array:
    const result = league.code.map(c => league.venue.findIndex(v => c === v.code));
    console.log(result);
        2
  •  0
  •   Nina Scholz    1 年前

    一种不同的方法,即拥有一个对象和一个数据循环。

    const
        league = { venue: [{ code: 1000, team: "Arsenal" }, { code: 1001, team: "Spurs" }, { code: 1002, team: "Liverpool" }, { code: 1003, team: "Manchester City" }, { code: 1004, team: "Manchester United"}, { code: 1005, team: "Everton" }], code: [1004, 1005, 1000, 1003, 1002] },
        targets = Object.fromEntries(Object
            .entries(league.code)
            .map(([k, v]) => [v, k])
        ),
        result = league.venue.reduce(
            (r, { code }, i) => r.with(targets[code], i),
            Array(league.code.length)
        );
    
    console.log(result);