【问题标题】:How to particular key's value in an object based on the values from another array and using arrays sequence in mind如何根据来自另一个数组的值并牢记使用数组序列来指定对象中的特定键值
【发布时间】:2019-07-08 10:08:51
【问题描述】:

我有一个对象,它的键值对基于另一个数组中的值,该数组只有与对象键匹配的键。我想形成一个不同的数组。请记住数组的顺序以及我想制作另一个仅包含对象值的数组的方式。

我已尝试使用 object.entries 并使用 forEach 来键入对象,但无法获得所需的结果。

var arrayLegends = ["totalregisteredfirst","totalregisteredsecond", "totalregisteredfourth"];

var lengendsObj = {totalregisteredfirst: "1st visit", totalregisteredfourth: "4th visit", totalregisteredsecond: "2nd visit"}

var legendsValue = [];

Object.entries(lengendsObj).forEach(function([objKey, objValue]) {
  arrayLegends.forEach(function(value) {
    if (value === objKey ) {
      legendsValue.push(objValue);
    }
  });
});

console.log('legends value', legendsValue);

预期结果数组 = ['第一次访问','第二次访问','第 4 次访问'];

实际结果数组 = [ '1st visit', '4th visit', '2nd visit' ];

【问题讨论】:

    标签: javascript sorting ecmascript-6 javascript-objects


    【解决方案1】:

    由于arrayLegends 包含您要在legendsObj 中以正确顺序检索的键,您只需遍历arrayLegends 并在legendsValue 中推送相应的值:

    var arrayLegends = ["totalregisteredfirst","totalregisteredsecond", "totalregisteredfourth"];
    
    var lengendsObj = {totalregisteredfirst: "1st visit", totalregisteredfourth: "4th visit", totalregisteredsecond: "2nd visit"}
    
    var legendsValue = [];
    
    arrayLegends.forEach(function(value) {
      legendsValue.push(lengendsObj[value]);
    });
      
    console.log('legends value', legendsValue);

    【讨论】:

      【解决方案2】:

      看看这个:

      let arrayLegends = ["totalregisteredfirst","totalregisteredsecond", "totalregisteredfourth"];
      
      let lengendsObj = {totalregisteredfirst: "1st visit", totalregisteredfourth: "4th visit", totalregisteredsecond: "2nd visit"}
      
      var legendsValue = arrayLegends.map((key) => lengendsObj[key]);
      

      【讨论】:

        【解决方案3】:

        您的代码非常接近获得您想要的结果,您只需使用 arrayLegends 作为外循环,使用 Object.entries(lengendsObj) 作为内循环:

        var arrayLegends = ["totalregisteredfirst","totalregisteredsecond", "totalregisteredfourth"];
        
        var lengendsObj = {totalregisteredfirst: "1st visit", totalregisteredfourth: "4th visit", totalregisteredsecond: "2nd visit"}
        
        var legendsValue = [];
        
        arrayLegends.forEach(function (value) {
        	Object.entries(lengendsObj).forEach(function([objKey, objValue]) {
        		if (value === objKey ) {
        		  legendsValue.push(objValue);
        		}
        	});
        });
        
        console.log('legends value', legendsValue);

        【讨论】:

        • 既然您已经拥有密钥,那么当您可以直接从对象中获取值时,为什么还要遍历legendsObj?
        • @ArpitAgrawal 我想向 OP 展示他有多接近达到他想要的结果。但可以肯定的是,运行时间可以从我的 n^2 操作和 OP 的帖子中得到很大的改善。在这方面你的回答真的很好。
        【解决方案4】:

        Object order is not guaranteed in JavaScript。对对象的迭代不一定会在独立运行时以相同的顺序完成。而是迭代您的数组; 确实有保证的顺序。

        var arrayLegends = ["totalregisteredfirst","totalregisteredsecond", "totalregisteredfourth"];
        
        var legendsObj = {totalregisteredfirst: "1st visit", totalregisteredfourth: "4th visit", totalregisteredsecond: "2nd visit"}
        
        var legendsValue = [];
        
        arrayLegends.forEach(k => {
            legendsValue.push(legendsObj[k]);
        });
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-08-04
          • 2020-04-15
          • 1970-01-01
          • 2020-09-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-03-05
          相关资源
          最近更新 更多