我有两个集合,对象有一个公共密钥"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) #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
我正在制作一个游戏,而且我遇到了一个问题...当我尝试保存时,JSON失败并报告正在某处制作循环引用.我不认为它实际上是,我看不到它,所以是否有算法或任何可以告诉我它究竟在哪里(在哪些对象和东西之间)?另外,是否有可以保存循环引用的JSON替代方案?我正在运行一个node.js服务器,我看到了这个,但我无法让它工作(它不是作为一个模块,我可以在我的代码中需要()).
javascript json circular-reference serverside-javascript node.js
我有名字的表格'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} 散列的数组。但是如何创建对象呢?
我了解到,当使用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从上面的链接中获取答案.
我使用 vue-apexcharts 在仪表板中绘制图表。我创建了一个通用文件,其中包含所有图表的基本选项(以统一样式和代码可重用性),并在必要时使用mergeDeep() 函数扩展/覆盖该对象。xaxis 类型默认定义为“类别”,如果“日期时间”图表需要,此值稍后会更改。
当将 xaxis.type 覆盖为“datetime”时,图表会失败并显示 unix 纪元值而不是格式化的字符串日期。如果图表是独立的或者如果我从基本选项文件中删除 de xaxis.labels 对象,则不会发生这种情况。
我正在使用最新的 apexchart (3.8.0) 和 vue-apexcharts (1.3.6) 版本。
使用 new Date() 可以正确创建日期。
我尝试过的事情:
独立图表。有效,但我可能需要合并图表
删除 apexchartGenericOptions.js 对象中的 xaxis.labels 对象。有效,但轴没有样式。
使用 JSON.parse(JSON.stringify(options)) 深度克隆所有单独的选项对象。mergeDeep() 函数使用 Array.reduce 创建一个完整的新对象,因此它不应该是突变问题。不起作用。
重置几个我不知道在哪里创建的属性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) 我想合并两个对象,覆盖属性,但保留未被覆盖的属性。
示例:我有以下对象
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) 我正在寻找如下所示的动态重新创建以下内容,而无需手动定义匹配项在对象属性中的位置。
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) 假设我有变量'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).
有人有主意吗?
在组件内部,我尝试从可以在组件内部修改的服务中复制对象,但应该保留在服务中.
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
合并它覆盖的嵌套对象。
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)
当打印目标结果 …
我目前正在处理一个带有 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.toSpeak并skills.linguisticSkills.toRead不断变化,即添加或删除项目。每当它发生变化时,我如何在 setState 中合并 person1 和 obj2 以便我最终处于正确的状态?
更新: _.merge 在这样的情况下失败:
person1 = {
name: 'ramya', …Run Code Online (Sandbox Code Playgroud) javascript ×11
lodash ×2
object ×2
reactjs ×2
angular ×1
apexcharts ×1
arrays ×1
collections ×1
copy ×1
forms ×1
json ×1
jsx ×1
merge ×1
node.js ×1
redux ×1
reference ×1
shallow-copy ×1
vue.js ×1