相关疑难解决方法(0)

如何使用Lodash基于密钥合并两个集合?

我有两个集合,对象有一个公共密钥"userId".如下:

var _= require('lodash');

var a = [
  { userId:"p1", item:1},
  { userId:"p2", item:2},
  { userId:"p3", item:4}
];

var b = [
  { userId:"p1", profile:1},
  { userId:"p2", profile:2}
];
Run Code Online (Sandbox Code Playgroud)

我想基于"userId"合并它们以产生:

[ { userId: 'p1', item: 1, profile: 1 },
  { userId: 'p2', item: 2, profile:2 },
  { userId: 'p3', item: 4 } ]
Run Code Online (Sandbox Code Playgroud)

到目前为止我有这些:

var u = _.uniq(_.union(a, b), false, _.property('userId'));
Run Code Online (Sandbox Code Playgroud)

结果如下:

[ { userId: 'p1', item: 1 },
  { userId: 'p2', item: 2 },
  { userId: 'p3', item: 4 …
Run Code Online (Sandbox Code Playgroud)

javascript collections merge lodash

23
推荐指数
4
解决办法
3万
查看次数

如何正确传递带有spread属性的嵌套属性?(JSX)

#1

你好.我有代码:

class Component extends React.Component
{
  render()
  {
    this.props.nested.prop = this.props.parse.nested.prop;
    return <div>Component</div>;
  }
  componentDidMount()
  {
    console.log(this.props.nested.prop);
  }
}
Component.defaultProps = 
{
  nested:
  {
    prop: "default"
  }
};

const obj1 = 
{
  nested:
  {
    prop: "obj1"
  }
};
const obj2 = 
{
  nested:
  {
    prop: "obj2"
  }
};

class Application extends React.Component
{
  render()
  {
    return (
     <div>
        <Component parse={obj1}/>
        <Component parse={obj2}/>
    </div>
    );
  }
}

React.render(<Application />, document.getElementById('app'));
//console output:
//"obj2"
//"obj2"
Run Code Online (Sandbox Code Playgroud)

为什么我为每个组件获得2个独立组件的1个变量引用而不是2个nested的nested.prop?为什么this.props在安装后只保存组件的所有实例的最后设置值?这是正常的行为吗?我认为正确的行为是针对不同的实例具有不同的属性值.

PS我在这里测试了这段代码.

#2

jimfb …

javascript jsx reactjs

12
推荐指数
1
解决办法
1万
查看次数

有没有办法在JavaScript中测试循环引用?

我正在制作一个游戏,而且我遇到了一个问题...当我尝试保存时,JSON失败并报告正在某处制作循环引用.我不认为它实际上是,我看不到它,所以是否有算法或任何可以告诉我它究竟在哪里(在哪些对象和东西之间)?另外,是否有可以保存循环引用的JSON替代方案?我正在运行一个node.js服务器,我看到了这个,但我无法让它工作(它不是作为一个模块,我可以在我的代码中需要()).

javascript json circular-reference serverside-javascript node.js

11
推荐指数
3
解决办法
6289
查看次数

Javascript将表单序列化为对象

我有名字的表格'config[display][x]', 'config[display][y]', 'config[port]',...,或者我可以创建不同的格式。我想将它序列化为 JS 对象,例如

{config:
    display : {x : 'value', y : 'value'},
    port : 'value'
}
Run Code Online (Sandbox Code Playgroud)

有人知道现有的解决方案吗?

ps 我可以使用 jQuery 的 .serializeArray() 序列化表单,但我将拥有带有简单 {name : name, value : value} 散列的数组。但是如何创建对象呢?

javascript forms serialization

6
推荐指数
1
解决办法
9258
查看次数

JS递归对象赋值

我了解到,当使用Object.assign()时,它只扩展顶级对象.我怎样才能深度扩展对象?例如,假设我有以下源对象:

const source = {
  id: 1,
  otherKey: {},
  params: {
    page: {
      a: 1,
      b: {}
    },
    data: {
      b: 1
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

我这样使用Object.assign():

Object.assign({}, source, {
  params: {
    page: {
      a: 2
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

结果将是:

{
      id: 1,
      otherKey: {},
      params: {
        page: {
          a: 2
        }
      }
}
Run Code Online (Sandbox Code Playgroud)

如何以浅克隆方式保留params.data键和params.page.b键.

oldObject.params.data === newObject.params.data  // true
oldObject.params.page === newObject.params.page  // false
oldObject.params.page.b === newObject.params.page.b // true
Run Code Online (Sandbox Code Playgroud)

注意:此问题与如何深度合并而不是浅合并不同.那里的答案没有给出预期的结果.

检查此bin从上面的链接中获取答案.

javascript shallow-copy javascript-objects shallow-clone

6
推荐指数
1
解决办法
3453
查看次数

使用日期时间类型时 Apexcharts xaxis 格式化失败

我使用 vue-apexcharts 在仪表板中绘制图表。我创建了一个通用文件,其中包含所有图表的基本选项(以统一样式和代码可重用性),并在必要时使用mergeDeep() 函数扩展/覆盖该对象。xaxis 类型默认定义为“类别”,如果“日期时间”图表需要,此值稍后会更改。

当将 xaxis.type 覆盖为“datetime”时,图表会失败并显示 unix 纪元值而不是格式化的字符串日期。如果图表是独立的或者如果我从基本选项文件中删除 de xaxis.labels 对象,则不会发生这种情况。

我正在使用最新的 apexchart (3.8.0) 和 vue-apexcharts (1.3.6) 版本。

使用 new Date() 可以正确创建日期。

我尝试过的事情:

  1. 独立图表。有效,但我可能需要合并图表

  2. 删除 apexchartGenericOptions.js 对象中的 xaxis.labels 对象。有效,但轴没有样式。

  3. 使用 JSON.parse(JSON.stringify(options)) 深度克隆所有单独的选项对象。mergeDeep() 函数使用 Array.reduce 创建一个完整的新对象,因此它不应该是突变问题。不起作用。

  4. 重置几个我不知道在哪里创建的属性convertedCatToNumeric: true,和categories: []。不起作用

我创建了一个codesandbox示例

x轴配置在apexchartGenericOptions.js

export default {
  (...)
  xaxis: {
    type: 'category',
    labels: {
      show: true,
      style: { colors: '#bcc6d3', fontSize: '10px', fontFamily: 'Nunito Sans, sans-serif' },
    },
    axisBorder: …
Run Code Online (Sandbox Code Playgroud)

javascript vue.js apexcharts

6
推荐指数
1
解决办法
7934
查看次数

在JavaScript中合并两个对象并覆盖

我想合并两个对象,覆盖属性,但保留未被覆盖的属性。

示例:我有以下对象

const theme = {
 colors: {
  base: '#fff',
  accent: '#ff0000'
 }
}
Run Code Online (Sandbox Code Playgroud)

const themeOverride = {
 colors: {
  accent: '#ff8900'
 }
}
Run Code Online (Sandbox Code Playgroud)

并希望将它们合并在一起

const newTheme = {
  colors: {
   base: '#fff',
   accent: '#ff8900'
  }
}
Run Code Online (Sandbox Code Playgroud)

javascript javascript-objects

5
推荐指数
3
解决办法
1976
查看次数

动态设置嵌套对象的属性(如果存在)。重新创建 _.extend

我正在寻找如下所示的动态重新创建以下内容,而无需手动定义匹配项在对象属性中的位置。

期望的结果

const obj = {
  levelOne: {
    someFun: () => {},
    levelTwo: {
      anArray: [],
      something: 'asas',
      levelThree: {
        stay: 'the same',
        name: 'Set this one!',
      },
    },
  },
}

const updatedObj = {
  ...obj,
  levelOne: {
    ...obj.levelOne,
    levelTwo: {
      anArray: [],
      ...obj.levelOne.levelTwo,
      levelThree: {
        ...obj.levelOne.levelTwo.levelThree,
        name: 'Updated prop!',
      },
    },
  },
}

console.info(updatedObj)
{
 levelOne: {
   someFun: () => {},
   levelTwo: {
     something: 'asas',
       levelThree: {
         stay: 'the same',
         name: "Updated prop!",
       },
     },
   },
 }
Run Code Online (Sandbox Code Playgroud)

迄今为止

const …
Run Code Online (Sandbox Code Playgroud)

javascript

5
推荐指数
1
解决办法
193
查看次数

创建一个纯函数来合并对象

假设我有变量'state'和'newState'.我想创建一个纯函数,返回使用'newState'的属性(和子属性)更新的'state'.这是一个例子:

const state = {id:1, name:'aName', description: 'aDescription'};

const newState = {id:1, name:'newName', subItems: {id:3, type:'whatever'}};
Run Code Online (Sandbox Code Playgroud)

该函数将返回:

{id:1, name:'newName', subItems: {id:3, type:'whatever'}}
Run Code Online (Sandbox Code Playgroud)

我可以使用rest参数,但我不知道如何追加而不是覆盖.我不能只是遍历属性,因为我希望函数是纯的(redux reducer).

有人有主意吗?

javascript functional-programming reactjs redux

3
推荐指数
1
解决办法
113
查看次数

Angular4复制对象没有引用?

在组件内部,我尝试从可以在组件内部修改的服务中复制对象,但应该保留在服务中.

private test;

public ngOnInit(): {
  console.log(this.someService.test.someProperty) //'old'
  this.test = this.someService.test;

  //not working as well?!
  //this.test = Object.assign({}, this.someService.test);
  //this.test = Object.create(this.somerService.test);

  this.changeTest();
}

public changeTest(): void {
  this.test.someProperty = 'new';
}
Run Code Online (Sandbox Code Playgroud)

在init之后,this.test.someProperty以及this.someService.test.someProperty更改为new即使最后应该留下old

为什么会这样,以及如何只改变属性 this.test

copy reference object angular

2
推荐指数
2
解决办法
6925
查看次数

如何在javascript中合并嵌套对象

合并它覆盖的嵌套对象。

let target = { cache: 
              {curUser:
               { callingName: 'ch sairam', dateOfBirth: undefined, isTempDob: true, knowMarketPrefChange: true, email: 'sairamch3@gmail.com', gender: '',  livingIn: 'IN', uid: 'CrzpFL2uboaeGvMxXi5WQKSQsCr1', timeZone: undefined }, 
               names: [ [Object] ],   minPrice: '2500', maxPrice: '50000', market: 'CA', foundLovedOne: false,  }
             }
Run Code Online (Sandbox Code Playgroud)
let source = { cache: 
              {curUser: 
               { isTempDob: true, knowMarketPrefChange: false, timeZone: 'Asia/Kolkata' },
               prefLanguage: 'en', market: 'IN',  minPrice: 2250, maxPrice: 45000, foundLovedOne: false, domainName: 'roo-fire.appspot.com', prodQueryPageNumber: 0, welcomeIntentShown: true }, 
              curContexts: [] }
Run Code Online (Sandbox Code Playgroud)
 target = Object.assign({},target,source);
Run Code Online (Sandbox Code Playgroud)

当打印目标结果 …

javascript

2
推荐指数
1
解决办法
1797
查看次数

javascript中对象的递归合并

我目前正在处理一个带有 react 的项目,并且在使用 setState 方法时遇到合并两个对象的问题。我有两个类似的对象

person1 = {
    name: 'ramya',
    age: 21,
    gender: 'f',
    skills:{
        technicalSkills: {
            languages: ['C', 'C++', 'Java'],
            operatingSystems: ['Unix', 'Linux']
        },
        linguisticSkills: {
            toSpeak: ['English', 'Tamil'],
            toRead: ['English']
        }
    },
}

obj2 = {
    skills: {
        linguisticSkills: {
            toRead: ['English', 'Tamil']
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我想将第 1 个人的 Skills.linguisticSkills 的状态更改为

linguisticSkills: {
                toSpeak: ['English', 'Tamil'],
                toRead: ['English', 'Tamil']
} 
Run Code Online (Sandbox Code Playgroud)

skills.linguisticSkills.toSpeakskills.linguisticSkills.toRead不断变化,即添加或删除项目。每当它发生变化时,我如何在 setState 中合并 person1 和 obj2 以便我最终处于正确的状态?

更新: _.merge 在这样的情况下失败:

person1 = {
        name: 'ramya', …
Run Code Online (Sandbox Code Playgroud)

javascript arrays object lodash

0
推荐指数
1
解决办法
8991
查看次数